84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
做一个在线图片浏览的网页,因为鼠标左右键都被占用了,想用js实现类似于AutoCAD那种用鼠标中键就可拖放图片的功能,找了很久都没找到相关方面的资料,这个应该怎样实现?
走同样的路,发现不同的人生
鼠标移上去的时候判断是否点击了鼠标中键,然后再进行拖拽事件不知道是不是这样?
每一个鼠标事件event对象都有一个button属性,通过button属性指定是哪个键按下
<!DOCTYPE html> <html> <head> <style type="text/css"> #box{position:absolute; left:100px; top:100px; padding:5px; background:#f0f3f9; font-size:12px; -moz-box-shadow:2px 2px 4px #666666; -webkit-box-shadow:2px 2px 4px #666666;} #main{border:1px solid #a0b3d6; background:white;} #bar{line-height:24px; background:#beceeb; border-bottom:1px solid #a0b3d6; padding-left:5px; cursor:move;} #content{width:420px; height:250px; padding:10px 5px;} </style> <script> var params = { left: 0, top: 0, currentX: 0, currentY: 0, flag: false }; var getCss = function(o,key){ return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key]; }; var startDrag = function(bar, target, callback){ if(getCss(target, "left") !== "auto"){ params.left = getCss(target, "left"); } if(getCss(target, "top") !== "auto"){ params.top = getCss(target, "top"); } bar.onmousedown = function(event){ params.flag = true; if(!event){ event = window.event; bar.onselectstart = function(){ return false; } } var e = event; params.currentX = e.clientX; params.currentY = e.clientY; }; document.onmouseup = function(){ params.flag = false; if(getCss(target, "left") !== "auto"){ params.left = getCss(target, "left"); } if(getCss(target, "top") !== "auto"){ params.top = getCss(target, "top"); } }; document.onmousemove = function(event){ var e = event ? event: window.event; if(params.flag){ var nowX = e.clientX, nowY = e.clientY; var disX = nowX - params.currentX, disY = nowY - params.currentY; target.style.left = parseInt(params.left) + disX + "px"; target.style.top = parseInt(params.top) + disY + "px"; } if (typeof callback == "function") { callback(parseInt(params.left) + disX, parseInt(params.top) + disY); } } }; </script> </head> <body> <p id="box"> <p id="main"> <p id="bar">拖拽我吧~</p> <p id="content">乖~</p> </p> </p> <script> var oBox = document.getElementById("box"); var oBar = document.getElementById("bar"); startDrag(oBar, oBox); </script> </body> </html>
我给你一个Demo。
说一下我的想法,希望能提供一些思路。
拖拽的过程无非是 鼠标按键按下->鼠标移动->鼠标按键释放 三个步骤,只要分别监听这三个事件并记录一些数据就行了。
鼠标按键按下
鼠标移动
鼠标按键释放
我们把所有事件委托到window 对象上,并假定有一个全局变量 var Store = {};。
window
var Store = {};
一、当鼠标按下时 (window.onmousedown 事件):
window.onmousedown
通过 event.target 来判断当前被按住的元素是否可以被拖拽,如果是执行第2步,否则直接返回。
event.target
保存当前被按住的元素的原始位置 Store.originalTop = ?, Store.originalLeft = ? (被按住的元素的 style.position 应该为 absolute)
Store.originalTop = ?
Store.originalLeft = ?
style.position
absolute
通过 event 对象获取按下时鼠标所在的位置 event.pageX, event.pageY, ... 也可以取一些其他你感兴趣的值。把取到的值保存在Store中。
event
event.pageX
event.pageY
...
Store
设置拖拽标志为真 Store.isDragging = true。
Store.isDragging = true
二、当鼠标移动时(window.onmousemove 事件):
window.onmousemove
判断 Store.isDragging === true 是否成立,如果成立,执行第2步,否则直接返回。
Store.isDragging === true
通过 event.pageX, event.pageY, ...,获取当前鼠标位置。 把得到的值与之前保存在 Store 中的相减,以确定鼠标分别在 x,y方向上的偏移量,然后通过得到的偏移量和之前保存在Store 中的 originalTop 和 originalLeft 来更新被拖拽的元素的位置。
x
y
偏移量
originalTop
originalLeft
三、当鼠标释放时(window.onmouseup 事件):
window.onmouseup
设拖拽标志为假 Store.isDragging = false.
Store.isDragging = false
这个问题很简单,你需要去买一个雷蛇或者低端一点的国产鼠标(带宏设置的)安装好驱动,将鼠标中间宏定义为鼠标左键,然后中间和左键的功能也就是一样的了。这样你就可以使用楼上的方法来实现这样的功能。不行你捅了我。。
html5不是有现成的拖拽功能吗?
鼠标移上去的时候判断是否点击了鼠标中键,然后再进行拖拽事件
不知道是不是这样?
每一个鼠标事件event对象都有一个button属性,通过button属性指定是哪个键按下
我给你一个Demo。
说一下我的想法,希望能提供一些思路。
拖拽的过程无非是
鼠标按键按下
->鼠标移动
->鼠标按键释放
三个步骤,只要分别监听这三个事件并记录一些数据就行了。我们把所有事件委托到
window
对象上,并假定有一个全局变量var Store = {};
。一、当鼠标按下时 (
window.onmousedown
事件):通过
event.target
来判断当前被按住的元素是否可以被拖拽,如果是执行第2步,否则直接返回。保存当前被按住的元素的原始位置
Store.originalTop = ?
,Store.originalLeft = ?
(被按住的元素的style.position
应该为absolute
)通过
event
对象获取按下时鼠标所在的位置event.pageX
,event.pageY
,...
也可以取一些其他你感兴趣的值。把取到的值保存在Store
中。设置拖拽标志为真
Store.isDragging = true
。二、当鼠标移动时(
window.onmousemove
事件):判断
Store.isDragging === true
是否成立,如果成立,执行第2步,否则直接返回。通过
event.pageX
,event.pageY
,...
,获取当前鼠标位置。 把得到的值与之前保存在Store
中的相减,以确定鼠标分别在x
,y
方向上的偏移量,然后通过得到的偏移量
和之前保存在Store
中的originalTop
和originalLeft
来更新被拖拽的元素的位置。三、当鼠标释放时(
window.onmouseup
事件):设拖拽标志为假
Store.isDragging = false
.这个问题很简单,你需要去买一个雷蛇或者低端一点的国产鼠标(带宏设置的)安装好驱动,将鼠标中间宏定义为鼠标左键,然后中间和左键的功能也就是一样的了。
这样你就可以使用楼上的方法来实现这样的功能。
不行你捅了我。。
html5不是有现成的拖拽功能吗?