/** layui-v2.5.6 MIT License By https://www.layui.com */
;layui.define("jquery",function(e){"use strict";
// 获取 layui 的 jQuery 实例
var a=layui.jquery,
i={config:{},index:layui.rate?layui.rate.index+1e4:0, // 默认配置
set:function(e){ // 设置配置项
var i=this;
return i.config=a.extend({},i.config,e),i
},
on:function(e,a){ // 监听事件
return layui.onevent.call(this,n,e,a)
}
};
// 定义局部变量
var l=function(){
var e=this,a=e.config;
return {
setvalue:function(a){ // 设置评分值
e.setvalue.call(e,a)
},
config:a
}
},
n="rate", // 定义组件标识符
t="layui-rate", // 样式类
o="layui-icon-rate", // 未选中的星星图标
s="layui-icon-rate-solid", // 选中的完整星星图标
u="layui-icon-rate-half", // 半星图标
r="layui-icon-rate-solid layui-icon-rate-half", // 完整星和半星
c="layui-icon-rate-solid layui-icon-rate", // 完整星图标
f="layui-icon-rate layui-icon-rate-half", // 半星图标样式
v=function(e){ // 评分控件构造函数
var l=this;
l.index=++i.index; // 自动递增索引
l.config=a.extend({},l.config,i.config,e); // 合并配置项
l.render(); // 渲染评分控件
};
v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""}, // 默认配置
v.prototype.render=function(){ // 渲染评分组件
var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':""; // 处理主题颜色
i.elem=a(i.elem); // 获取元素
parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value))); // 设置值为整数或半星
var n='
"; // 初始化评分组件HTML结构
for(var u=1;u<=i.length;u++){
var r=' ";
i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?
n=n+' ":n+=r
}
n+="
"+(i.text?''+i.value+"星":"")+"";
var c=i.elem, f=c.next("."+t);
f[0]&&f.remove(); // 移除旧的评分控件
e.elemTemp=a(n); // 渲染新的评分控件
i.span=e.elemTemp.next("span"); // 获取显示评分值的span
i.setText&&i.setText(i.value); // 设置文本
c.html(e.elemTemp); // 将评分控件添加到目标元素
c.addClass("layui-inline"); // 给元素添加样式
i.readonly||e.action(); // 如果不是只读模式,绑定事件
};
v.prototype.setvalue=function(e){ // 设置评分值并重新渲染
var a=this,i=a.config;
i.value=e;
a.render(); // 重新渲染
};
v.prototype.action=function(){ // 处理点击、鼠标悬停和移出事件
var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width(); // 获取星星的宽度
l.children("li").each(function(e){ // 遍历每个星星
var t=e+1,v=a(this);
v.on("click",function(e){ // 处理点击事件
if(i.value=t,i.half){
var o=e.pageX-a(this).offset().left;
o<=n/2&&(i.value=i.value-.5) // 半星处理
}
i.text&&l.next("span").text(i.value+"星"); // 显示星级
i.choose&&i.choose(i.value); // 调用用户自定义的选择事件
i.setText&&i.setText(i.value); // 设置文本
}),
v.on("mousemove",function(e){ // 处理鼠标悬停事件
if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),
l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),
i.half){
var c=e.pageX-a(this).offset().left;
c<=n/2&&v.children("i").addClass(u).removeClass(s) // 半星高亮
}
}),
v.on("mouseleave",function(){ // 处理鼠标移出事件
l.find("i").each(function(){a(this).addClass(o).removeClass(r)});
l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)});
i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)
})
});
};
v.prototype.events=function(){ var e=this;e.config}, // 定义事件
i.render=function(e){ // 渲染评分控件并返回实例
var a=new v(e);
return l.call(a);
};
e(n,i) // 导出模块
});