首页 > 代码库 > mouseup,mousedown,mousemove,弹出框拖动效果,javascript
mouseup,mousedown,mousemove,弹出框拖动效果,javascript
<script type="text/javascript"> | |
var dialogInstace , onMoveStartId , mousePos = {x:0,y:0}; // 用于记录当前可拖拽的对象 | |
// var zIndex = 9000; | |
// 获取元素对象 | |
function g(id){return document.getElementById(id);} | |
// 自动居中元素(el = Element) | |
function autoCenter( el ){ | |
var bodyW = document.documentElement.clientWidth; | |
var bodyH = document.documentElement.clientHeight; | |
var elW = el.offsetWidth; | |
var elH = el.offsetHeight; | |
el.style.left = (bodyW-elW)/2 + ‘px‘; | |
el.style.top = (bodyH-elH)/2 + ‘px‘; | |
} | |
// 自动扩展元素到全部显示区域 | |
function fillToBody( el ){ | |
el.style.width = document.documentElement.clientWidth +‘px‘; | |
el.style.height = document.documentElement.clientHeight + ‘px‘; | |
} | |
// Dialog实例化的方法 | |
function Dialog( dragId , moveId ){ | |
var instace = {} ; | |
instace.dragElement = g(dragId); // 允许执行 拖拽操作 的元素 | |
instace.moveElement = g(moveId); // 拖拽操作时,移动的元素 | |
instace.mouseOffsetLeft = 0; // 拖拽操作时,移动元素的起始 X 点 | |
instace.mouseOffsetTop = 0; // 拖拽操作时,移动元素的起始 Y 点 | |
instace.dragElement.addEventListener(‘mousedown‘,function(e){ | |
var e = e || window.event; | |
dialogInstace = instace; | |
instace.mouseOffsetLeft = e.pageX - instace.moveElement.offsetLeft ; | |
instace.mouseOffsetTop = e.pageY - instace.moveElement.offsetTop ; | |
onMoveStartId = setInterval(onMoveStart,10); | |
return false; | |
// instace.moveElement.style.zIndex = zIndex ++; | |
}) | |
return instace; | |
} | |
// 在页面中侦听 鼠标弹起事件 | |
document.onmouseup = function(e){ | |
dialogInstace = false; | |
clearInterval(onMoveStartId); | |
} | |
document.onmousemove = function( e ){ | |
var e = window.event || e; | |
mousePos.x = e.clientX; | |
mousePos.y = e.clientY; | |
e.stopPropagation && e.stopPropagation(); | |
e.cancelBubble = true; | |
e = this.originalEvent; | |
e && ( e.preventDefault ? e.preventDefault() : e.returnValue = http://www.mamicode.com/false ); | |
document.body.style.MozUserSelect = ‘none‘; | |
} | |
function onMoveStart(){ | |
var instace = dialogInstace; | |
if (instace) { | |
var maxX = document.documentElement.clientWidth - instace.moveElement.offsetWidth; | |
var maxY = document.documentElement.clientHeight - instace.moveElement.offsetHeight ; | |
instace.moveElement.style.left = Math.min( Math.max( ( mousePos.x - instace.mouseOffsetLeft) , 0 ) , maxX) + "px"; | |
instace.moveElement.style.top = Math.min( Math.max( ( mousePos.y - instace.mouseOffsetTop ) , 0 ) , maxY) + "px"; | |
} | |
} | |
// 重新调整对话框的位置和遮罩,并且展现 | |
function showDialog(){ | |
g(‘dialogMove‘).style.display = ‘block‘; | |
g(‘mask‘).style.display = ‘block‘; | |
autoCenter( g(‘dialogMove‘) ); | |
fillToBody( g(‘mask‘) ); | |
} | |
// 关闭对话框 | |
function hideDialog(){ | |
g(‘dialogMove‘).style.display = ‘none‘; | |
g(‘mask‘).style.display = ‘none‘; | |
} | |
// 侦听浏览器窗口大小变化 | |
window.onresize = showDialog; | |
Dialog(‘dialogDrag‘,‘dialogMove‘); | |
showDialog(); | |
</script> |
mouseup,mousedown,mousemove,弹出框拖动效果,javascript
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。