基于jquery的用dl模擬實現(xiàn)可自定義樣式的SELECT下拉列表(已封裝)
更新時間:2010年11月05日 14:59:30 作者:
通過dl模擬實現(xiàn)SELECT下拉列表. 其實這是項目中要常用到的一個效果, 于是, 在之前寫的基礎上封裝成了一個插件. 可自定義樣式, 可防止用戶本意劃過時觸發(fā)事件.
具體思路就不說了,比較常規(guī), 代碼中也有注釋. 使用方法也不費話了, 就是一個簡單的全局函數封裝, 不懂的看下源碼中注釋或Google .
另外, 有興趣的朋友,可以嘗試在本插件基礎上改一個可輸入的下拉列表. 思路差不多,哈.
演示及代碼: 演示代碼 代碼下載
運行代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
核心代碼:
;(function($){
$.fn.extend({
iSelect: function(options){
var iset = {
name: $('.selectitem'), //容器
select: $('.selectitem>dl'), //dl列表
dropCss: 'drop', //收藏狀態(tài)dt的樣式
shrinkCss: 'shrink', //展開狀態(tài)dt的樣式
hoverCss: 'hover', //鼠標劃過dd時的樣式
clearTime: 100, //允許用戶快速劃過不觸發(fā)的時間(ms)
dropTime: 100, //展開時間(ms)
shrinkTime: 100 //收縮時間(ms)
}
options = options || {};
$.extend(iset, options);
var mainHeight = iset.name.height();//容器高度
var selectHeight = iset.select.height(); //dl實際高度
var curTxt = iset.select.find('dt').html(); //dt默認html內容
var self = null;
var hoverElem = null; //避免用戶快速劃過時觸發(fā)事件
iset.name.each(function(){
$(this).hover(function(){
self = this;
hoverElem = setTimeout(function(){
$(self).stop(true, false).animate({ //鼠標劃過時,展開dl
height: selectHeight
}, iset.dropTime);
if ($(self).find('dt').html() == curTxt) { //判斷是否有選擇下拉列表,若無則改變dt樣式
$(self).find('dt').attr('class', iset.dropCss);
}
//dd的鼠標事件
$(self).find('dd').mouseover(function(){
$(this).addClass(iset.hoverCss).siblings().removeClass(iset.hoverCss);
}).mousedown(function(){ //鼠標點擊時取值并賦給dt
$(self).find('dt').html($(this).html()).attr('class', $(this).attr('class'));
$(self).stop(true, false).animate({
height: mainHeight
}, iset.shrinkTime);
}).removeClass(iset.hoverCss);
}, iset.clearTime);
}, function(){
//鼠標移出后觸發(fā)的事件
clearTimeout(hoverElem);
$(self).stop(true, false).animate({
height: mainHeight
}, iset.shrinkTime);
if ($(self).find('dt').html() == curTxt) {
$(self).find('dt').attr('class', iset.shrinkCss);
}
});
})
}
})
})(jQuery);
另外, 有興趣的朋友,可以嘗試在本插件基礎上改一個可輸入的下拉列表. 思路差不多,哈.
演示及代碼: 演示代碼 代碼下載
運行代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
核心代碼:
復制代碼 代碼如下:
;(function($){
$.fn.extend({
iSelect: function(options){
var iset = {
name: $('.selectitem'), //容器
select: $('.selectitem>dl'), //dl列表
dropCss: 'drop', //收藏狀態(tài)dt的樣式
shrinkCss: 'shrink', //展開狀態(tài)dt的樣式
hoverCss: 'hover', //鼠標劃過dd時的樣式
clearTime: 100, //允許用戶快速劃過不觸發(fā)的時間(ms)
dropTime: 100, //展開時間(ms)
shrinkTime: 100 //收縮時間(ms)
}
options = options || {};
$.extend(iset, options);
var mainHeight = iset.name.height();//容器高度
var selectHeight = iset.select.height(); //dl實際高度
var curTxt = iset.select.find('dt').html(); //dt默認html內容
var self = null;
var hoverElem = null; //避免用戶快速劃過時觸發(fā)事件
iset.name.each(function(){
$(this).hover(function(){
self = this;
hoverElem = setTimeout(function(){
$(self).stop(true, false).animate({ //鼠標劃過時,展開dl
height: selectHeight
}, iset.dropTime);
if ($(self).find('dt').html() == curTxt) { //判斷是否有選擇下拉列表,若無則改變dt樣式
$(self).find('dt').attr('class', iset.dropCss);
}
//dd的鼠標事件
$(self).find('dd').mouseover(function(){
$(this).addClass(iset.hoverCss).siblings().removeClass(iset.hoverCss);
}).mousedown(function(){ //鼠標點擊時取值并賦給dt
$(self).find('dt').html($(this).html()).attr('class', $(this).attr('class'));
$(self).stop(true, false).animate({
height: mainHeight
}, iset.shrinkTime);
}).removeClass(iset.hoverCss);
}, iset.clearTime);
}, function(){
//鼠標移出后觸發(fā)的事件
clearTimeout(hoverElem);
$(self).stop(true, false).animate({
height: mainHeight
}, iset.shrinkTime);
if ($(self).find('dt').html() == curTxt) {
$(self).find('dt').attr('class', iset.shrinkCss);
}
});
})
}
})
})(jQuery);
相關文章
基于JavaScript如何實現(xiàn)ajax調用后臺定義的方法
由于ajax的獨特優(yōu)勢,使得它在當前大量網站得到了廣泛的應用,下面就介紹一下ajax如何調用后臺定義的函數,對ajax調用后臺方法相關知識感興趣的朋友一起學習吧2015-12-12