<script>show_start({'submit':1,'call_func':'alert'});</script>
pingfen.js
//使用方法请看 function show_start(vars_obj)后面说明
var obj_copy = null;
var move_timer = null;
function show_start(vars_obj)
{//动态载入评分条面板
/*
调用方式
在调用前先载入本js文件:
<script src="pingfen.js"></script>
在需要显示的地方插入下面代码即可(注:可以不给某属性赋值,让程序使用默认值):
多句形式:
<script>
//第一步,声明对象并给属性赋值
var vars_obj = {'属性名1':属性值,'属性名2':属性值,'img_folder':'http://www.xx.com/ddd/'};
或
var vars_obj = {};
vars_obj.img_folder = 'http://www.xx.com/ddd/';
//第二步
show_start(vars_obj);
</script>
或写成一句的形式:
<script>show_start({'属性名1':属性值,'属性名2':属性值,'img_folder':'http://www.xx.com/ddd/'});</script>
调用方式说明结束
vars_obj:js对象,此对象声明方法 var vars_obj = {};
vars_obj对象拥有属性和值说明:
img_folder:图片文件夹路径字符串,注意结束时字符串最后必须是/,默认是本js文件夹;
用到三个图片:transparent.gif(img对象的透明图片);star_dark.gif(暗星);star_light.gif(亮星)
star_dark_gif_name:暗星gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是star_dark
star_light_gif_name:亮星gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是star_light
transparent_gif_name:img对象src(亮img)gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是transparent
border_color:暗星左右边border颜色;表示色彩的字符串值;默认白色
border_width:暗星左右边border宽度;大于0数字;单位px;默认5
submit:是否用于提交,是时可以更改值;1|0整数值;默认0
rating_max:100%时分数是多少,1或以上数字(支持小数),默认是5;
rating:评分初始值,数字,0到rating_max间,超过只保留终值(0或rating_max);默认是0;
star_width:单个星图片宽度;1或以上整数;单位是px;默认是15
star_num:100%值时星个数,1或以上数字(支持带小数),默认是5
star_height:单个星图片的高度;1或以上整数;单位是px,默认是14
rating_input_name:用于提交评论值的input的name,默认是 pingfen,只允许使用英文和数字
call_func:点击改变值时调用函数hander,并传入改变后的值,所以函数中可以接受一个参数,默认是空;
满分的宽度 = 星个数*星宽度;
下面html代码必须值:
父宽(方式不限);
父左边框宽度(内联css);
input宽度(100%,或者父宽不指定,input撑开);
父对象:position:relative(让左边的值相对body);
*/
if (!vars_obj) vars_obj = {};
if (typeof(vars_obj.img_folder) != 'string') vars_obj.img_folder = '';
if (typeof(vars_obj.star_dark_gif_name) != 'string') vars_obj.star_dark_gif_name = 'star_dark';
if (typeof(vars_obj.star_light_gif_name) != 'string') vars_obj.star_light_gif_name = 'star_light';
if (typeof(vars_obj.transparent_gif_name) != 'string') vars_obj.transparent_gif_name = 'transparent';
if (typeof(vars_obj.border_color) != 'string') vars_obj.border_color = 'red';
vars_obj.border_width = parseInt(vars_obj.border_width);
if (isNaN(vars_obj.border_width) || (vars_obj.border_width <=0) ) vars_obj.border_width = 5;
if (isNaN(vars_obj.rating_max) || (vars_obj.rating_max < 1) ) vars_obj.rating_max = 5;
if (isNaN(vars_obj.rating) || (vars_obj.rating<0) ) vars_obj.rating = 0;
else if (vars_obj.rating>vars_obj.rating_max) vars_obj.rating = vars_obj.rating_max;
vars_obj.star_width = parseInt(vars_obj.star_width);
if (isNaN(vars_obj.star_width) || (vars_obj.star_width<1) ) vars_obj.star_width = 15;
vars_obj.star_num = parseFloat(vars_obj.star_num);
if (isNaN(vars_obj.star_num) || (vars_obj.star_num < 1) ) vars_obj.star_num = 5;
vars_obj.star_height = parseInt(vars_obj.star_height);
if (isNaN(vars_obj.star_height) || (vars_obj.star_height <1 ) ) vars_obj.star_height = 14;
if ( (typeof(vars_obj.rating_input_name)!='string') || (!/^[a-z][a-z0-9]*$/gi.test(vars_obj.rating_input_name)) ) vars_obj.rating_input_name = 'pingfen';
if ( (typeof(vars_obj.call_func)!='string') || (!/^[a-z][a-z0-9]*$/gi.test(vars_obj.call_func)) ) vars_obj.call_func = '';
var width_100 = vars_obj.star_width*vars_obj.star_num;//100%宽度
var title = ' title="[' + get_c(vars_obj.rating/vars_obj.rating_max) + ']' + vars_obj.rating/vars_obj.rating_max + '%" /n';
var bar_htm = '<span /n' +
' call_func="' + vars_obj.call_func +'" /n' +
title +
' width_100= "' + width_100 + '" /n';
if (vars_obj.submit) bar_htm +=' οnmοusemοve="l_star_e_chang(this,event);" /n' +
' onClick="l_star_e_chang(this,event,true);" /n' +
' οnmοuseοut="d_star_e_out();" /n' +
' οnmοuseοver="d_star_e_in();" /n'
;//开关,是否加改变事件
bar_htm += ' style="' +
' display:block; /n' +
' position:relative; /n' +
' background:url(' + vars_obj.img_folder+vars_obj.star_dark_gif_name + '.gif) repeat-x ; /n' +
' border:solid ' + vars_obj.border_color + ' ; /n' +
' border-width:0 ' + vars_obj.border_width + 'px; /n' +
' text-align:left; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' overflow-y:hidden; /n' +
' padding:0px; /n' +
' margin:0px; /n' +
' width:' + width_100 + 'px; /n' +
' " > /n';
bar_htm +='<img src="' + vars_obj.img_folder+vars_obj.transparent_gif_name + '.gif" /n' + title ;
if (vars_obj.submit) bar_htm +=' οnmοuseοut="l_star_e_out();" /n' +
' οnmοuseοver="l_star_e_in();" /n'
;//开关,是否加改变事件
bar_htm += ' style="' +
' width:' + vars_obj.rating/vars_obj.rating_max*100 + '%; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' background:url(' + vars_obj.img_folder+vars_obj.star_light_gif_name + '.gif) repeat-x; /n' +
' margin:0px; /n' +
' " /> /n';
bar_htm +='<input type="hidden" /n' +
' id="'+vars_obj.rating_input_name+'" /n' +
' name="' +vars_obj.rating_input_name+'" /n' +
' value="'+vars_obj.rating+'" /n'+
' star_w_n = "' + vars_obj.rating/vars_obj.rating_max*width_100 + '" /n' +
' rating_max = "' + vars_obj.rating_max + '" /n' +
' /> /n';
bar_htm += '</span> /n';
document.writeln(bar_htm);
}
function l_star_e_chang(obj,event,rec)
{//移动此标时显示实时值:亮星实时宽度,评分实时(X%)
obj_copy = obj;
obj_copy.mouse_x = event.clientX;//此标在x面的位置
obj_copy.mouse_y = event.clientY;//此标在y面的位置
obj_copy.star = obj_copy.children[0];//亮星对象
obj_copy.input = obj_copy.children[1];//input对象
obj_copy.star_w = obj_copy.getAttribute('width_100');//亮星100%最大宽度
obj_copy.left = obj_copy.offsetLeft + parseInt(obj_copy.style.borderLeftWidth);//窗口内边到对象左边的值
obj_copy.star_w_n = obj_copy.mouse_x - obj_copy.left;//亮星新宽度=此标-星左边
if (obj_copy.star_w_n < 0) obj_copy.star_w_n = 0;
else if (obj_copy.star_w_n > obj_copy.star_w) obj_copy.star_w_n = obj_copy.star_w;
if (rec)
{
obj_copy.input.setAttribute('star_w_n',obj_copy.star_w_n);点击了要记录 亮星恢复时使用
var new_value = obj_copy.input.getAttribute('rating_max') * get_w_100() / 100;//亮星占比转化成具体分值
obj_copy.input.setAttribute('value',new_value);
eval(obj_copy.getAttribute('call_func') + '(' + new_value + ')');//亮星占比转化成具体分值
}
obj_copy.star.title = obj_copy.title = '[' + get_c() + ']' + get_w_100() + '%';//在input中显示新宽度%分比和级别,和在父对象中提示
obj_copy.star.style.width = obj_copy.star_w_n + 'px';//设置亮星新宽度
//document.title = '此标,星左边,新宽,父宽=' + obj_copy.mouse_x + ',' + obj_copy.left + ',' + obj_copy.star_w_n + ',' + obj_copy.star_w;//显示调试信息
}
function get_w_100(star_w_n,star_w)
{//新%分比,4去5入 = 亮星新宽度/ 亮星100%最大宽度
if ( ( (!star_w_n) || (!star_w) ) && (!obj_copy) ) return 0;//防错处理
return Math.round( (isNaN(star_w_n)?obj_copy.star_w_n:star_w_n) / (isNaN(star_w)?obj_copy.star_w:star_w) * 100);
}
function get_c(w_100)
{//评分分级,传入x%中的x,值范围0-100;空值默认使用动态移动的当前值,
if (isNaN(w_100)) w_100 = get_w_100();
if (w_100< 40) return '很差';
else if (w_100< 60) return '一般';
else if (w_100< 80) return '满意';
else if (w_100<= 100) return '很好';
else return '无法判断';
}
function reset_star()
{//只要处于区域内就不能重置
if (!obj_copy) return 0;
if ( obj_copy.star.getAttribute('in') != 'yes' )
{//发现移出区域了就还原上次点击状态
obj_copy.star.style.width = obj_copy.input.getAttribute('star_w_n') + 'px';//亮星恢复宽度
obj_copy.star.title = obj_copy.title = '[' +
get_c(get_w_100(obj_copy.input.getAttribute('star_w_n'))) + ']' +
get_w_100(obj_copy.input.getAttribute('star_w_n')) + '%';//input恢复说明
obj_copy = null;
}
}
function l_star_e_out()
{//移出亮星,通知重置事件不在亮星内了.
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','');
}
function l_star_e_in()
{//进入亮星,通知重置事件还处于区域内
clearTimeout(move_timer);
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','yes');
}
function d_star_e_out()
{//d_out移出区域或进入亮星时触发,检查是否要重置
clearTimeout(move_timer);
move_timer = setTimeout('reset_star();',16);
}
function d_star_e_in()
{//d_in清除重置事件
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','');
clearTimeout(move_timer);
}
pingfen.js 单纯实现评分效果,并提供评分输出接口
使用方法:
<script>
function setd(my)
{
alert(my);//my就是点击更改后的最新评分
}
show_start({'submit':1,'call_func':'setd'});
</script>
//使用方法请看 function show_start(vars_obj)后面说明
var obj_copy = null;
var move_timer = null;
function show_start(vars_obj)
{//动态载入评分条面板
/*
调用方式
在调用前先载入本js文件:
<mce:script src="pingfen.js" mce_src="pingfen.js"></mce:script>
在需要显示的地方插入下面代码即可(注:可以不给某属性赋值,让程序使用默认值):
多句形式:
<mce:script type="text/javascript"><!--
//第一步,声明对象并给属性赋值
var vars_obj = {'属性名1':属性值,'属性名2':属性值,'img_folder':'http://www.xx.com/ddd/'};
或
var vars_obj = {};
vars_obj.img_folder = 'http://www.xx.com/ddd/';
//第二步
show_start(vars_obj);
// --></mce:script>
或写成一句的形式:
<mce:script type="text/javascript"><!--
show_start({'属性名1':属性值,'属性名2':属性值,'img_folder':'http://www.xx.com/ddd/'});
// --></mce:script>
调用方式说明结束
vars_obj:js对象,此对象声明方法 var vars_obj = {};
vars_obj对象拥有属性和值说明:
img_folder:图片文件夹路径字符串,注意结束时字符串最后必须是/,默认是本js文件夹;
用到三个图片:transparent.gif(img对象的透明图片);star_dark.gif(暗星);star_light.gif(亮星)
star_dark_gif_name:暗星gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是star_dark
star_light_gif_name:亮星gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是star_light
transparent_gif_name:img对象src(亮img)gif文件名(注意:不用写.gif,只需要写文件名即可)字符串,默认是transparent
border_color:暗星左右边border颜色;表示色彩的字符串值;默认白色
border_width:暗星左右边border宽度;大于0数字;单位px;默认5
submit:是否用于提交,是时可以更改值;1|0整数值;默认0
rating_max:100%时分数是多少,1或以上数字(支持小数),默认是5;
rating:评分初始值,数字,0到rating_max间,超过只保留终值(0或rating_max);默认是0;
star_width:单个星图片宽度;1或以上整数;单位是px;默认是15
star_num:100%值时星个数,1或以上数字(支持带小数),默认是5
star_height:单个星图片的高度;1或以上整数;单位是px,默认是14
call_func:点击改变值时调用函数hander,并传入改变后的值,所以函数中可以接受一个参数,默认是空;
满分的宽度 = 星个数*星宽度;
下面html代码必须值:
父宽(方式不限);
父左边框宽度(内联css);
父对象:position:relative(让左边的值相对body);
*/
if (!vars_obj) vars_obj = {};
if (typeof(vars_obj.img_folder) != 'string') vars_obj.img_folder = '';
if (typeof(vars_obj.star_dark_gif_name) != 'string') vars_obj.star_dark_gif_name = 'star_dark';
if (typeof(vars_obj.star_light_gif_name) != 'string') vars_obj.star_light_gif_name = 'star_light';
if (typeof(vars_obj.transparent_gif_name) != 'string') vars_obj.transparent_gif_name = 'transparent';
if (typeof(vars_obj.border_color) != 'string') vars_obj.border_color = 'red';
vars_obj.border_width = parseInt(vars_obj.border_width);
if (isNaN(vars_obj.border_width) || (vars_obj.border_width <=0) ) vars_obj.border_width = 5;
if (isNaN(vars_obj.rating_max) || (vars_obj.rating_max < 1) ) vars_obj.rating_max = 5;
if (isNaN(vars_obj.rating) || (vars_obj.rating<0) ) vars_obj.rating = 0;
else if (vars_obj.rating>vars_obj.rating_max) vars_obj.rating = vars_obj.rating_max;
vars_obj.star_width = parseInt(vars_obj.star_width);
if (isNaN(vars_obj.star_width) || (vars_obj.star_width<1) ) vars_obj.star_width = 15;
vars_obj.star_num = parseFloat(vars_obj.star_num);
if (isNaN(vars_obj.star_num) || (vars_obj.star_num < 1) ) vars_obj.star_num = 5;
vars_obj.star_height = parseInt(vars_obj.star_height);
if (isNaN(vars_obj.star_height) || (vars_obj.star_height <1 ) ) vars_obj.star_height = 14;
if ( (typeof(vars_obj.call_func)!='string') || (!/^[a-z][a-z_0-9]*$/gi.test(vars_obj.call_func)) ) vars_obj.call_func = '';
var width_100 = vars_obj.star_width*vars_obj.star_num;//100%宽度
var title = ' title="[' + get_c(vars_obj.rating/vars_obj.rating_max) + ']' + vars_obj.rating/vars_obj.rating_max + '%" /n';
var bar_htm = '<span /n' +
title +
' call_func="' + vars_obj.call_func +'" /n' +
' star_width_click = "' + vars_obj.rating/vars_obj.rating_max*width_100 + '" /n' +
' rating_max = "' + vars_obj.rating_max + '" /n' +
' width_100= "' + width_100 + '" /n';
if (vars_obj.submit) bar_htm +=' οnmοusemοve="l_star_e_chang(this,event);" /n' +
' onClick="l_star_e_chang(this,event,true);" /n' +
' οnmοuseοut="d_star_e_out();" /n' +
' οnmοuseοver="d_star_e_in();" /n'
;//开关,是否加改变事件
bar_htm += ' style="' +
' display:block; /n' +
' position:relative; /n' +
' background:url(/'' + vars_obj.img_folder+vars_obj.star_dark_gif_name + '.gif/') repeat-x ; /n' +
' border:solid ' + vars_obj.border_color + ' ; /n' +
' border-width:0 ' + vars_obj.border_width + 'px; /n' +
' text-align:left; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' overflow-y:hidden; /n' +
' padding:0px; /n' +
' margin:0px; /n' +
' width:' + width_100 + 'px; /n' +
' " mce_style="' +
' display:block; /n' +
' position:relative; /n' +
' background:url(/'' + vars_obj.img_folder+vars_obj.star_dark_gif_name + '.gif/') repeat-x ; /n' +
' border:solid ' + vars_obj.border_color + ' ; /n' +
' border-width:0 ' + vars_obj.border_width + 'px; /n' +
' text-align:left; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' overflow-y:hidden; /n' +
' padding:0px; /n' +
' margin:0px; /n' +
' width:' + width_100 + 'px; /n' +
' " > /n';
bar_htm +='<img src="' + vars_obj.img_folder+vars_obj.transparent_gif_name + '.gif" mce_src="' + vars_obj.img_folder+vars_obj.transparent_gif_name + '.gif" /n' + title;
if (vars_obj.submit) bar_htm +=' οnmοuseοut="l_star_e_out();" /n' +
' οnmοuseοver="l_star_e_in();" /n'
;//开关,是否加改变事件
bar_htm += ' style="' +
' width:' + vars_obj.rating/vars_obj.rating_max*100 + '%; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' background:url(/'' + vars_obj.img_folder+vars_obj.star_light_gif_name + '.gif/') repeat-x; /n' +
' margin:0px; /n' +
' " mce_style="' +
' width:' + vars_obj.rating/vars_obj.rating_max*100 + '%; /n' +
' height:' + vars_obj.star_height + 'px; /n' +
' background:url(/'' + vars_obj.img_folder+vars_obj.star_light_gif_name + '.gif/') repeat-x; /n' +
' margin:0px; /n' +
' " /> /n';
bar_htm += '</span> /n';
document.writeln(bar_htm);
eval(vars_obj.call_func + '(' + vars_obj.rating + ')');//初始化默认值
}
function l_star_e_chang(obj,event,rec)
{//移动此标时显示实时值:亮星实时宽度,评分实时(X%)
obj_copy = obj;
obj_copy.mouse_x = event.clientX;//此标在x面的位置
obj_copy.mouse_y = event.clientY;//此标在y面的位置
obj_copy.star = obj_copy.children[0];//亮星对象
obj_copy.star_width_max = obj_copy.getAttribute('width_100');//亮星100%最大宽度
obj_copy.left = obj_copy.offsetLeft + parseInt(obj_copy.style.borderLeftWidth);//窗口内边到对象左边的值
obj_copy.star_width_move = obj_copy.mouse_x - obj_copy.left;//亮星新宽度=此标-星左边
if (obj_copy.star_width_move < 0) obj_copy.star_width_move = 0;
else if (obj_copy.star_width_move > obj_copy.star_width_max) obj_copy.star_width_move = obj_copy.star_width_max;
if (rec)
{
obj_copy.setAttribute('star_width_click',obj_copy.star_width_move);点击了要记录 亮星恢复时使用
var new_value = obj_copy.getAttribute('rating_max') * get_w_100() / 100;//亮星占比转化成具体分值
eval(obj_copy.getAttribute('call_func') + '(' + new_value + ')');//亮星占比转化成具体分值
}
obj_copy.star.title = obj_copy.title = '[' + get_c() + ']' + get_w_100() + '%';//显示新宽度%分比和级别,在父对象中提示
obj_copy.star.style.width = obj_copy.star_width_move + 'px';//设置亮星新宽度
//document.title = '此标,星左边,新宽,父宽=' + obj_copy.mouse_x + ',' + obj_copy.left + ',' + obj_copy.star_width_move + ',' + obj_copy.star_width_max;//显示调试信息
}
function get_w_100(star_width_move,star_width_max)
{//新%分比,4去5入 = 亮星新宽度/ 亮星100%最大宽度
if ( ( (!star_width_move) || (!star_width_max) ) && (!obj_copy) ) return 0;//防错处理
return Math.round( (isNaN(star_width_move)?obj_copy.star_width_move:star_width_move) / (isNaN(star_width_max)?obj_copy.star_width_max:star_width_max) * 100);
}
function get_c(w_100)
{//评分分级,传入x%中的x,值范围0-100;空值默认使用动态移动的当前值,
if (isNaN(w_100)) w_100 = get_w_100();
if (w_100< 40) return '很差';
else if (w_100< 60) return '一般';
else if (w_100< 80) return '满意';
else if (w_100<= 100) return '很好';
else return '无法判断';
}
function reset_star()
{//只要处于区域内就不能重置
if (!obj_copy) return 0;
if ( obj_copy.star.getAttribute('in') != 'yes' )
{//发现移出区域了就还原上次点击状态
obj_copy.star.style.width = obj_copy.getAttribute('star_width_click') + 'px';//亮星恢复宽度
obj_copy.star.title = obj_copy.title = '[' +
get_c(get_w_100(obj_copy.getAttribute('star_width_click'))) + ']' +
get_w_100(obj_copy.getAttribute('star_width_click')) + '%';//恢复说明
obj_copy = null;
}
}
function l_star_e_out()
{//移出亮星,通知重置事件不在亮星内了.
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','');
}
function l_star_e_in()
{//进入亮星,通知重置事件还处于区域内
clearTimeout(move_timer);
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','yes');
}
function d_star_e_out()
{//d_out移出区域或进入亮星时触发,检查是否要重置
clearTimeout(move_timer);
move_timer = setTimeout('reset_star();',16);
}
function d_star_e_in()
{//d_in清除重置事件
if (!obj_copy) return 0;
obj_copy.star.setAttribute('in','');
clearTimeout(move_timer);
}
效果
功能:
些标在二个块之间时移动时实时显示亮星宽度和评级;不点移出后就恢复最后那次点击数据;点击就重新记录当前数据;