MooRating

本文介绍了一个使用MooTools库实现的评分插件,该插件允许用户通过鼠标悬停和点击操作来为项目打分。插件支持分数显示,并能够通过AJAX提交评分结果。
Rating star using Mootools.

As unregisted user cannot download the attachment, so I delete it.

Tested in Mozilla Firefox and IE 7.0.

js
[code]
/*
* Rating star using Mootools.
*
* Modified from Dynamic Rating stars @copyright 2006 Beau D. Scott
* http://beauscott.com
*
* Note:valueBox must use continuous integers.If not, there could be some bugs.
* messageBox and valueBox keys must begin from zero.
*/
Rating = new Class( {

initialize : function(options) {

this.options = $extend( {
bindField : null,
maxRating : 5,
container : null,
imageDirectory : "images/",
callback : null,
actionURL : null,
value : 0,
locked : false,
useOpacityStyle : true,
messageBox : $H( {
0 : "Poor",
1 : "Nothing special",
2 : "Worth watching",
3 : "Pretty cool",
4 : "Awesome!"
}),
valueBox : $H( {
0 : 1,
1 : 2,
2 : 3,
3 : 4,
4 : 5
})
}, options || {});

if (this.options.messageBox.length != this.options.maxRating
|| this.options.valueBox.length != this.options.maxRating) {
alert("messageBox's length and valueBox's length must be equal to maxRating");
return;
}

/**
* hover and empty ratings imageSrc.
*/
this.hoverImages = {
EMPTY : this.options.imageDirectory + "empty.gif",
HALF : this.options.imageDirectory + "hover-half.gif",
FULL : this.options.imageDirectory + "hover.gif"
};

/**
* preload images
*/
for (var x in this.hoverImages) {
var y = document.createElement("img");
y.src = this.hoverImages[x];
}

/**
* selected and empty ratings imageSrc.
*/
this.selectedImages = {
EMPTY : this.options.imageDirectory + "empty.gif",
HALF : this.options.imageDirectory + "selected-half.gif",
FULL : this.options.imageDirectory + "selected.gif"
};
/**
* preload images
*/
for (var x in this.selectedImages) {
var y = document.createElement("img");
y.src = this.selectedImages[x];
}

if ($defined(this.options.container)) {
this.container = $(this.options.container);
} else {
this.id = "ratecontainer" + Math.random(0, 10000);
document.write('<span id="' + this.id + '"></span>');
this.container = $(this.id);
}

this.initialized = false;
this.rated = false;
this.ratings = [];
this.value = -1;
this.locked = this.options.locked ? true : false;
this.useOpacityStyle = this.options.useOpacityStyle ? true : false;

this.display();
this.setValue(this.options.value);
this.initialized = true;
},

display : function() {
for (var i = 0;i < this.options.maxRating; i++) {
var rating = document.createElement("img");
rating.src = this.locked
? this.selectedImages.EMPTY
: this.hoverImages.EMPTY;
rating.style.cursor = "pointer";
rating.title = this.options.messageBox.get(i);
if (!this.locked) {
rating.addEvent("mouseover", this.hover.bind(this));
rating.addEvent("click", this.rate.bind(this));
rating.addEvent("mouseout", this.clear.bind(this));
}
this.ratings.push(rating);
this.container.appendChild(rating);
}
},

setValue : function(val) {
if (this.locked && this.initialized)
return;

// iterate on options.valueBox to search key for val.

for (var i = 0;i < this.options.valueBox.length; i++) {
var value = this.options.valueBox.get(i);
if (value == val + .5) {
this.value = i - .5;
break;
} else if (value == val) {
this.value = i;
break;
}
}
/*
* this.options.valueBox.each(function(value, key) { if (value == val +
* .5) { this.value = key - .5; } else if (value == val) { this.value =
* key; } }, this);
*/
if (this.options.bindField) {
$(this.options.bindField).value = val;
}
if (this.initialized) {
if (this.options.actionURL) {
// ajax submit.
new Ajax(this.options.actionURL + val, {
method : "get",
onComplete : this.options["callback"]
}).request();
} else if (this.options.callback) {
this.options["callback"](val);
}
}
this.clear();
},

hover : function(ev) {
if (this.locked)
return;
var rating = new Event(ev).target;
var greater = false;

this.ratings.each(function(el) {
el.src = greater ? this.hoverImages.EMPTY : this.hoverImages.FULL;
if (rating == el) {
greater = true;
// TODO use opacity style, maybe more beautiful styles should be
// added.
if (this.useOpacityStyle) {
var fx = new Fx.Style(el, "opacity", {
duration : 500,
wait : false
});
fx.start(.5, 1);
}
}
}, this);
},

rate : function(ev) {
if (this.locked)
return;
var rating = new Event(ev).target;
this.rated = true;

this.ratings.some(function(el, i) {
if (el == rating) {
this.setValue(this.options.valueBox.get(i));
return true;
}
}, this);
},

clear : function(ev) {
if (this.locked && this.initialized)
return;
var greater = false;
this.ratings.each(function(el, i) {
if (i > this.value)
greater = true;
if ((this.initialized && this.rated) || this.value == -1)
el.src = greater ? (this.value + .5 == i)
? this.hoverImages.HALF
: this.hoverImages.EMPTY : this.hoverImages.FULL;
else
this.ratings[i].src = greater ? (this.value + .5 == i)
? this.selectedImages.HALF
: this.selectedImages.EMPTY : this.selectedImages.FULL;
}, this)
}
});
[/code]


Usage:
[code]
<script>
var rating = new Rating({
value:0.5,
locked:false,
bindField:'test',
callback:showRate
});

function showRate(val){
rating.locked=true;
}
</script>
[/code]
内容概要:本文介绍了基于Koopman算子理论的模型预测控制(MPC)方法,用于非线性受控动力系统的状态估计与预测。通过将非线性系统近似为线性系统,利用数据驱动的方式构建Koopman观测器,实现对系统动态行为的有效建模与预测,并结合Matlab代码实现具体仿真案例,展示了该方法在处理复杂非线性系统中的可行性与优势。文中强调了状态估计在控制系统中的关键作用,特别是面对不确定性因素时,Koopman-MPC框架能够提供更为精确的预测性能。; 适合人群:具备一定控制理论基础和Matlab编程能力的研【状态估计】非线性受控动力系统的线性预测器——Koopman模型预测MPC(Matlab代码实现)究生、科研人员及从事自动化、电气工程、机械电子等相关领域的工程师;熟悉非线性系统建模与控制、对先进控制算法如MPC、状态估计感兴趣的技术人员。; 使用场景及目标:①应用于非线性系统的建模与预测控制设计,如机器人、航空航天、能源系统等领域;②用于提升含不确定性因素的动力系统状态估计精度;③为研究数据驱动型控制方法提供可复现的Matlab实现方案,促进理论与实际结合。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注Koopman算子的构造、观测器设计及MPC优化求解部分,同时可参考文中提及的其他相关技术(如卡尔曼滤波、深度学习等)进行横向对比研究,以深化对该方法优势与局限性的认识。
内容概要:本文研究了基于物理信息神经网络(PINN)求解二阶常微分方程(ODE)边值问题的方法,并提供了完整的Matlab代码实现。文章通过将微分方程的物理规律嵌入神经网络损失函数中,利用神经网络的逼近能力求解边值问题,避免传统数值方法在网格划分和迭代收敛方面的局限性。文中详细介绍了PINN的基本原理、网络结构设计、损失函数构建及训练流程,并以典型二阶ODE边值问题为例进行仿真验证,展示了该方法的有效性和精度。此外,文档还附带多个相关科研方向的Matlab案例资源链接,涵盖状态估计、优PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题研究(Matlab代码实现)化调度、机器学习、信号处理等多个领域,突出其在科学研究中的实际应用价值。; 适合人群:具备一定数学基础和Matlab编程能力的理工科研究生、科研人员及从事科学计算、工程仿真等相关工作的技术人员。; 使用场景及目标:①用于求解传统数值方法难以处理的复杂或高维微分方程问题;②为科研工作者提供PINN方法的入门实践路径,推动其在物理建模、工程仿真等领域中的创新应用;③结合所提供的丰富资源拓展至电力系统、故障诊断、优化调度等交叉学科研究。; 阅读建议:建议读者结合文中的Matlab代码逐行理解PINN实现机制,动手复现并尝试修改方程形式与边界条件以加深理解,同时可参考附带资源扩展应用场景,提升科研效率与创新能力。
内容概要:本文研究在电力系统负荷发生突变的情况下,采用无迹卡尔曼滤波(UKF)和自适应无迹卡尔曼滤波(AUKF)进行三相状态估计的方法。针对负荷突变带来的系统非线性和不确定性,文章对比了UKF与AUKF在状态估计中的性能差异,重点分析AUKF通过自适应调整噪声协方差矩阵的能力,提升对突变工况的响应精度和鲁棒性。文中给出了完整的Matlab代码实现,涵盖系统建模、量测方程构建、滤波算法设计及仿真验证流程,展示了在动态变化环境下实现高精度状态估计的有效途径。; 适合人群:具备电力系统分析基础和Matlab编程能力,从事电【状态估计】基于UKF、AUKF的电力系统负荷存在突变时的三相状态估计研究(Matlab代码实现)力系统状态估计、智能电网监控或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于含高比例分布式电源和负荷波动剧烈的现代配电系统状态估计;②用于提升电力系统在突发事件下的实时监测与故障预警能力;③为高级能量管理系统(EMS)提供可靠的动态状态信息支持。; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注AUKF中噪声协方差自适应机制的设计逻辑,并可通过修改负荷突变场景进行仿真实验,深入掌握不同滤波方法在动态环境下的适用性与局限性。
如果你是一个喜欢收集各类小众工具、常用软件的电脑用户,一定懂 “应用散落在桌面 / 文件夹,找起来翻半天” 的烦恼 —— 而自定义软件工具箱 V1.6,正是为解决这个痛点而生的轻量化管理工具。这款由开发者大飞哥软件自习室 打造的工具,以 “极简 + DIY” 为核心定位,让你能亲手搭建专属的软件收纳库,把零散的应用、常用网址、Win 系统命令都 “装” 进一个整洁的面板里。 从功能来看,它的实用性几乎覆盖了个人软件管理的所有需求:你可以自由添加本地软件、粘贴常用网址,甚至直接录入 Win 系统命令(比如快速打开注册表、任务管理器),不用再记复杂指令;同时支持新建选项卡和自定义分类名称,把办公软件、娱乐工具、效率插件按自己的习惯归类,避免 “大杂烩” 式混乱。 细节上的设计也足够贴心:你可以给每个条目添加备注(比如标注软件用途)、更换 ICO 图标(只需把图标文件放进 Icons 目录),还能调整条目位置、切换主题色,让工具箱既好用又符合自己的审美。搜索功能更是 “懒人友好”—— 输入软件名称关键词后按 Enter 键,就能模糊匹配到目标,不用在分类里逐层查找。 更值得一提的是,它本身是 “空盒” 模式,不预装任何软件,完全由用户自主填充,既避免了冗余应用占用空间,也能精准契合每个人的使用习惯。不管你是需要整理工作工具的职场人,还是喜欢收集小众软件的爱好者,这款轻量、灵活的工具箱都能帮你把电脑桌面 “化繁为简”,让常用资源触手可及。 作为 V1.6 版本,它在之前的基础上优化了界面简洁度,同时保留了 “自由排序、位置迁移、单右键菜单操作” 等实用特性,既没有复杂的功能门槛,又能满足个性化管理的核心需求,堪称个人软件收纳的 “私人定制柜”。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值