首先:我们需要一个可以移动的DIV 复制代码
代码如下:
js实现可拖动DIV的方法
这篇文章主要介绍了js实现可拖动DIV的方法,有需要的朋友可以参考一下
随着时代的变化,越来越感觉到js的重要性,js不仅可以做web页面(如Ext框架),还可以做一些web的特效,这些特效不仅兼容PC,而且兼容手机端,毕竟是基于浏览器的,和平台没关系。现在微软的windows8
系统的App都可以用js开发了,大家有时间可以去尝试一下。
现在切入正题,说一下js 实现可拖动Div.实现这个功能我们先说一下思路:
1.捕捉鼠标div的mousedown事件
2.捕捉 document的 mousemove事件
3.取消事件
然后我们看一下代码:
代码如下:
function Drag(id) {
澳门太阳娱乐手机登录, var $ = function (flag) {
return document.getElementById(flag);
}
$(id).onmousedown = function (e) {
var d = document;
var page = {
event: function (evt) {
var ev = evt || window.event;
return ev;
},
pageX: function (evt) {
var e = this.event(evt);
return e.pageX || (e.clientX +
document.body.scrollLeft – document.body.clientLeft);
},
pageY: function (evt) {
var e = this.event(evt);
return e.pageY || (e.clientY +
document.body.scrollTop – document.body.clientTop);
},
layerX: function (evt) {
var e = this.event(evt);
return e.layerX || e.offsetX;
},
layerY: function (evt) {
var e = this.event(evt);
return e.layerY || e.offsetY;
}
}
var x = page.layerX(e);
var y = page.layerY(e);
if (dv.setCapture) {
dv.setCapture();
}
else if (window.captureEvents) {
window.captureEvents(Event.MOUSEMOVE |
Event.MOUSEUP);
}
d.onmousemove = function (e) {
var tx = page.pageX(e) – x;
var ty = page.pageY(e) – y;
dv.style.left = tx + “px”;
dv.style.top = ty + “px”;
}
d.onmouseup = function () {
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE |
Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
}
}
}
代码分析:
1.
获取div对象
复制代码 代码如下:
var $ = function (flag) {
return document.getElementById(flag);
}
2.捕捉document的mousedown事件:
里面有这么一段代码:
代码如下:
var page = {
event: function (evt) {
var ev = evt || window.event;
return ev;
},
pageX: function (evt) {
var e = this.event(evt);
return e.pageX || (e.clientX +
document.body.scrollLeft – document.body.clientLeft);
},
pageY: function (evt) {
var e = this.event(evt);
return e.pageY || (e.clientY +
document.body.scrollTop – document.body.clientTop);
},
layerX: function (evt) {
var e = this.event(evt);
return e.layerX || e.offsetX;
},
layerY: function (evt) {
var e = this.event(evt);
return e.layerY || e.offsetY;
}
}
其中event获取鼠标事件,pageX,pageY获取鼠标的坐标,layerX,layerY获取鼠标距离div边框的距离。
还有一段代码:
代码如下:
if (dv.setCapture) {
dv.setCapture();
}
else if (window.captureEvents) {
window.captureEvents(Event.MOUSEMOVE |
Event.MOUSEUP);
}
这个就是捕捉div的MouseMove和MouseUp事件,不懂得tx可以到网上查查。
- document的MouseMove和mouseUp事件:
代码如下:
d.onmousemove = function (e) {
var tx = page.pageX(e) – x;
var ty = page.pageY(e) – y;
dv.style.left = tx + “px”;
dv.style.top = ty + “px”;
}
d.onmouseup = function () {
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE |
Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
}
其中的tx,ty就是最重要的代码了,是设置div坐标的
有的人可能会问为什么要-x,-y?
x,y其实就是获取鼠标距离div边框的距离,如果不减掉的话
鼠标箭头的坐标和div的x,y坐标一样了,这样拖动之后,鼠标的位置会偏到左上角,效果就是,拖动之后会弹动一下。
代码如下:
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE |
Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
上面这段代码就是在鼠标松开之后取消document的onmousemove,onmouseup事件。
最近都在学习js,后续有新的心得体会也会与大家分享,希望与大家共同学习,进步。
这篇文章主要介绍了js实现可拖动DIV的方法,有需要的朋友可以参考一下
随着时代的变化,越来越感觉到js的重要性…
var getMouseP=function {//获取鼠标坐标 请传递evnet参数 e = e ||
window.event; var m=?{ x:e.pageX, y:e.pageY } : { x:e.clientX +
document.body.scrollLeft – document.body.clientLeft, y:e.clientY +
document.body.scrollTop – document.body.clientTop }; return m; };
move=function; t=$j; o.onmousedown=function{ var
mxy=getMouseP;//获取当前鼠标坐标 var by={x:mxy.x-,y:mxy.y-};
o.style.cursor=”move”; document.onmousemove=function{ var mxy=getMouseP;
t.style.left=mxy.x-by.x+”px”; t.style.top=mxy.y-by.y+”px”; };
document.onmouseup=function(){ window.getSelection ? window.getSelection
: document.selection.empty(); this.onmousemove=null; } } }
move(“jelle_test_div”,”jelle_test_div”);
然后:我们需要控制他的移动范围 复制代码
代码如下:
解决了上面的我问题。那么这个效果就不难了。! 我们可以获得了 一个 x y,
恰好这个 x y 可以用来设置大图背景的 x y。
这里我们值得注意的事。要把握好大图与小图的比例。 还有就是显示图片的DIV
与移动的DIV 比例。 比如我这里的比例: 大图800*800 小图是200*200
显示大图的DIV 200*200 移动的div 50*50。
其实我还没总结出这个公式。绕的有点头晕呵呵。 下面我贴出全部代码:
图片放大效果
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
相关文章
- 二种设置php载入页面时编码的诀要_php工夫_脚本之家
- 再次认证澳门太阳娱乐手机登录,照旧苹果双重认证安全
- 【澳门太阳娱乐手机登录】DDOS攻击战略_php手艺_脚本之家
- 馆内藏品真的全体焚毁了啊,巴西联邦共和国国家博物院遭温火袭击
- javascript用DIV模拟弹出窗口_窗体滚动跟随_javascript技艺_脚本之家
- PHP安全防范技巧分享_php技巧_脚本之家
- 应尽量制止学龄前小孩子使用手提式有线电话机和计算机,国家卫健委澳门太阳娱乐手机登录
- 澳门太阳娱乐手机登录至于Yii中模型场景的片段简短介绍_php实例_脚本之家,Yii2中的场景
- 小米9提振投资者信心,小米今年一定要拿下欧洲
- 谷歌联合创始人佩奇将接替施密特出任CEO,佩奇下周一上任Google