菜单

图片放大效果澳门太阳娱乐手机登录,js实现可拖动DIV的方法

2020年2月10日 - 澳门太阳娱乐手机登录

首先:我们需要一个可以移动的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可以到网上查查。

  1. 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需刷新才能执行]

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图