var isie = /msie/i.test(navigator.useragent); function gid(id){return document.getelementbyid(id);} //漂浮 //参数:层id,记录上次滚动位置(默认可以为空,递归使用) function scrolldiv(id,pscrolly){ //var scrolly = document.documentelement.scrolltop ? document.documentelement.scrolltop : document.body.scrolltop; var scrolly = document.documentelement.scrolltop || document.body.scrolltop; //兼容处理 if (pscrolly ==null) { pscrolly=0; } var movetop = .1 * (scrolly - pscrolly); //可调整移动速度 movetop = (movetop > 0) ? math.ceil(movetop) : math.floor(movetop); gid(id).style.top = parseint(gid(id).style.top) + movetop + "px"; pscrolly = pscrolly + movetop; settimeout("scrolldiv('"+id+"',"+pscrolly+");",50); //可调整滚动后的反映速度 } //增加事件动作,不冲突原来的事件 //参数,对象,事件名称(带on),事件定义(如果要带参数,则要function(){eventfunc("")}这样传递参数) function addobjevent(obj,eventname,eventfunc){ if (obj.attachevent){ //ie obj.attachevent(eventname,eventfunc); }else if (obj.addeventlistener){ //ff gecko / w3c var eventname2 = eventname.tostring().replace(/on(.*)/i,'$1'); //正则过滤第1个on obj.addeventlistener(eventname2,eventfunc, false); //fslse为倒序执行事件 }else{ obj[eventname] = eventfunc; } } //移除事件动作 //参数,对象,事件名称(带on),事件定义(如果要带参数,则要function(){eventfunc("")}这样传递参数) function delobjevent(obj,eventname,eventfunc){ if (obj.detachevent) { // ie obj.detachevent(eventname,eventfunc); }else if (obj.removeeventlistener){ //ff gecko / w3c var eventname2 = eventname.tostring().replace(/on(.*)/i,'$1'); //正则过滤第1个on obj.removeeventlistener(eventname2,eventfunc, false); //fslse为倒序执行事件 }else{ obj[eventname] = null; } } //可以任意拖动的层(支持firefox,ie) //参数,移动的层对象和event对象,方法 onmousedown="movediv(this,event)" function movediv(obj,e){ e = e||window.event; var ie6=isie; if (/msie 9/i.test(navigator.useragent)) {ie6=false;} //把ie9设置为非ie浏览器 //只允许通过鼠标左键进行拖拽,ie68鼠标左键为1 firefox ie9其他为0 if (ie6 && e.button == 1 || !ie6 && e.button == 0) {}else{return false;} obj.style.position='absolute'; //设置浮动模式 obj.ondragstart =function(){return false;} //禁止对象的拖动事件,不然图片在火狐下会无法拖动 var x = e.screenx - obj.offsetleft; var y = e.screeny - obj.offsettop; addobjevent(document,'onmousemove',moving); //鼠标移动时,增加移动事件 addobjevent(document,'onmouseup',endmov); //鼠标放开时,增加停止事件 e.cancelbubble = true; //禁止事件冒泡,使触发在子对象上的事件不传递给父对象 //ie去除选中背景文字 if (isie) { obj.setcapture(); //设置捕获范围 releasecapture() 释放 } else { window.captureevents(event.mousemove); //window.releaseevents(event.eventtype) 释放 } //if (!isie){e.stoppropagation();} //w3c 禁止冒泡 //firefox 去除容器内拖拽图片问题,火狐防止选中背景文字 if (e.preventdefault) { e.preventdefault(); //取消事件的默认动作 e.stoppropagation(); //事件不再被分派到其他节点 } e.returnvalue = false; //指事件的返回值是false 。return false;是指函数的返回值为false return false; //移动 function moving(e){ obj.style.left = (e.screenx - x) + 'px'; obj.style.top = (e.screeny - y) + 'px'; return false; //图片移动时会出现拖动图片的动作,增加这个return可以不执行这个动作 } //停止 function endmov(e){ delobjevent(document,'onmousemove',moving); //删除鼠标移动事件 delobjevent(document,'onmouseup',arguments.callee); //删除鼠标放开事件,arguments.callee为函数本身 if (isie) { obj.releasecapture(); //释放捕获 } else { window.releaseevents(event.mousemove); //释放 } } }