MooRating

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在C#开发中,Windows Media Player控件是集成音频和视频播放功能的强大工具。本文将介绍如何在C#中实现不同的播放模式,如随机播放、列表循环和单曲循环,这些功能在多媒体应用中十分常见 。 要使用Windows Media Player控件,首先需要将其添加到C#项目中。在Visual Studio中,可以通过在工具箱中搜索“Windows Media Player”,并将其拖放到窗体上完成 。接着,设置控件的基本属性,如URL,以指定要播放的媒体文件 。 随机播放模式会在一首歌曲播放结束后,随机选择播放列表中的下一首歌曲。可以通过创建一个包含所有歌曲URL的数组,并利用Random类生成随机索引来实现。例如: 列表循环模式会在一首歌曲播放结束后,自动从播放列表的开头重新开始播放。实现方法是检测到播放结束后,将URL重置为列表的第一个元素: 单曲循环模式则是在一首歌曲播放结束后,重新播放当前歌曲。可以通过将播放器的当前播放位置重置为0并重新播放来实现: 以上代码均需在windowsMediaPlayer1_PlayStateChange事件处理器中实现,该事件会在播放器的播放状态改变时触发 。需要注意的是,这些示例假设已正确引用了WMPLib命名空间,并且Windows Media Player控件的ID为“windowsMediaPlayer” 。 在实际应用中,除了实现播放模式外,还可能需要考虑错误处理、用户界面更新等因素。为了使播放列表更具动态性,可以考虑从数据库或XML文件加载歌曲信息,而不是硬编码在代码中,从而提升用户体验 。通过这些方法,可以在C#中灵活实现Windows Media Player的各种播放模式,满足不同多媒体应用场景的需求 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值