最近项目要做一个类似于html5里的Input[range]滑动选值的效果,如图,原理很简单,拖动时目标随鼠标位置变化,不过中间也遇到了一个问题,在chrome下没问题,在FF和IE下,只有右键能很好的拖动,左键拖动一下就不能动了,最后无意中发现FF和IE在对<a>标签的拖动有特殊的处理,无奈,不用<a>标签就是了。
同时支持多个同时调用,如果放开鼠标时目标处于中间,则会自动移动到最近的图点处。
资源可在http://download.csdn.net/detail/guyuehu452/4317644下载,不用积分。
腾讯微博:http://t.qq.com/guyue1106/profile?pgv_ref=im.minicard.title&ptlang=2052,
新浪weibo:http://weibo.com/1714234642/profile?leftnav=1&wvr=3.6&mod=personinfo
欢迎互加!
html代码:
<dl>
<dt>你能接受的着装要求是?</dt>
<dd><span> 休闲型</span><span class="dragBox"><em class="dragImg"></em></span><span>制服型</span></dd>
</dl>
css样式就不多说了;
js代码:
$(function(){
$('.dragBox').dragSel();
})
(function($){
$.fn.dragSel= function(){
$(this).each(function(i,item){
var pram ={
_left:$(item).offset().left,
_top:$(item).offset().top,
_x: 0,
_y: 0,
flg: false,
$em:$(item).find('em'),//拖动对象
_al:0
};
pram.$em.mousedown(function(e){
if(e.button==0)pram.flg = true;
});
$(document).bind('mousemove',function(e){
e = e || window.event;
if(pram.flg){
pram.$em.selectUnable()
pram._x= e.pageX;
pram._y= e.pageY;
pram.$em.css({left:pram._x - pram._left});
}
});
$(document).mouseup(function(e){
e = e || window.event;
pram.flg = false;
clearInterval(pram.s);
pram._al = pram.$em.offset().left - pram._left +5;
var n = $(item).width()/8;
if(pram._al<n){
pram.$em.animate({left:"0"});
}else if(pram._al<n*3){
pram.$em.animate({left:n*2-5+"px"});
}else if(pram._al<n*5){
pram.$em.animate({left:n*4-5+"px"});
}else if(pram._al<n*7){
pram.$em.animate({left:n*6-5+"px"});
}else{
pram.$em.animate({left:n*8-5+"px"});
}
});
})
}
//防止拖动中选中
$.fn.selectUnable=function(){
if(document.selection){//IE ,Opera
if(document.selection.empty)
document.selection.empty();//IE;
else //Opera
document.selection = null;
}else if(window.getSelection){//FF,Safari
window.getSelection().removeAllRanges();
}
};
})(jQuery);