jQuery 插件开发 其实很简单

2020-05-24 21:30:42易采站长站整理

.css(‘width’, ps.size.barWidth)
.appendTo(ps.renderTo);
var completedbar = sliderbar.find(‘div:eq(0)’)
.attr(‘class’, ps.completedCssName);
var slider = sliderbar.find(‘div:eq(1)’)
.attr(‘class’, ps.sliderCssName)
.css(‘width’, ps.size.sliderWidth);

这样我们就在UI上直接呈现了Html并且用定制的css进行渲染,分别用sliderbar, completedbar, slider对我们需要的三个对象进行缓存。
ok, 在呈现了UI后我们就需要提供方法来实现slider的拖拽,在这之前我们还需要实现一个方法,就是completedbar的实时更新,即在拖动slider的时候让completedbar始终填充左侧区域:

var bw = sliderbar.width(), sw = slider.width();
//make sure that the slider was displayed in the bar(make a limited)
ps.limited = { min: 0, max: bw – sw };
if (typeof window.$sliderProcess == ‘undefined’) {
window.$sliderProcess = new Function(‘obj1’, ‘obj2’, ‘left’,
‘obj1.css(’left’,left);obj2.css(’width’,left);’);
}
$sliderProcess(slider, completedbar, eval(‘ps.limited.’ + ps.initPosition));

bw,sw用来存储sliderbar和slider的长度,此处没有直接使用ps.size里的值是为了防止样式里的border-width对width造成破坏。
定义一个私用成员limited来存储slider[left]的最大值和最小值,并在后面直接使用eval(‘ps.limited.’ + ps.initPosition)来获取,从而避免switch操作。
同时还需定义一个全局Function用来定位completedbar的填充长度以及slider左侧距离,我给其命名为$sliderProcess。
那么我们接下来剩下的工作就是slider的拖拽功能了,那么在这里我会用到之前发布的一款jQuery拖拽插件,并做适量的订制:

//drag and drop
var slide = {
drag: function(e) {
var d = e.data;
var l = Math.min(Math.max(e.pageX – d.pageX + d.left, ps.limited.min), ps.limited.max);
$sliderProcess(slider, completedbar, l);
//push two parameters: 1st:percentage, 2nd: event
ps.onChanging(l / ps.limited.max, e);
},
drop: function(e) {
slider.removeClass(ps.sliderHover);
//push two parameters: 1st:percentage, 2nd: event
ps.onChanged(parseInt(slider.css(‘left’)) / sw – ps.limited.max, e);
$().unbind(‘mousemove’, slide.drag).unbind(‘mouseup’, slide.drop);
}
};
if (ps.enable) {
//bind events
slider.bind(‘mousedown’, function(e) {
var d = {
left: parseInt(slider.css(‘left’)),
pageX: e.pageX
};
$(this).addClass(ps.sliderHover);
$().bind(‘mousemove’, d, slide.drag).bind(‘mouseup’, d, slide.drop);
});
}

这样当jSlider enable属性为true时,在end-user按下鼠标时绑定mousemove事件,在鼠标弹起时移除,我们只需要同步更新slider的left 属性和completedbar的width即可,同时在drag中绑定onChanging方法,在drop中绑定onChanged方法,向这两个方法推送的参数相同,1>百分比,即value值,介于0~1,2>event。