快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

原生JS拖拽效果

很多时候我们做网站都会遇到 JS拖拽的需求,今天就按照一个弹出框拖拽作为一个小案例写个JS原生的代码。

成都创新互联公司专注于企业全网整合营销推广、网站重做改版、吴忠网站定制设计、自适应品牌网站建设、H5响应式网站商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为吴忠等各大城市提供网站开发制作服务。

原生JS拖拽效果

按照上面的需求咱们开始制作一个拖拽效果吧。

第一步、咱们得写一个布局和响应的css


    标题
    

青格勒前端博客!

    

www.cenggel.com

这里的话咱们id=btn的为拖拽的区域。

二、逻辑讲述

整个JS代码不是很多,当鼠标按下的时候获取鼠标的位置和id=box的上距和左边距,然后计算目前的位置。

然后这时候鼠标移动的时候再次计算鼠标的位置,然后给id=box位置

当鼠标按钮松开的时候把onmousemove和onmouseup清除掉

三、JS代码部分


    function drag(obtnf,obtn){        //按钮及初始值
        var obtn = document.getElementById(obtn),
            obtnf = document.getElementById(obtnf),
            disX = 0,
            disY = 0;        //鼠标按下时开始计算
        obtn.onmousedown = function(ev){            var ev = ev || window.event;
            disX = ev.clientX - obtnf.offsetLeft;
            disY = ev.clientY - obtnf.offsetTop;            //鼠标按下并移动时计算
            document.onmousemove = function(ev){                var ev = ev || window.event;
                obtnf.style.left = ev.clientX - disX + 'px';
                obtnf.style.top = ev.clientY - disY + 'px';
            };            //鼠标松开时清除时间
            document.onmouseup = function(){                document.onmousemove = null;                document.onmouseup = null;
            };            return false;
        };
    };    //引用
    drag("box","btn") www.gendan5.com

最后咱们的效果如下

原生JS拖拽效果

做到这里其实咱们的效果并不完美,应为当我们拖拽的时候发现,他能直接被拖到浏览器的外面去了,所以咱们再给他加点限制。

最终JS代码如下:


    function xianzhi(val,max,min){        if (val > max){            return max;
        }else if(val < min){            return  min;
        }else{            return val;
        }        console.log(val)
    }    function drag(obtnf,obtn){        //按钮及初始值
        var obtn = document.getElementById(obtn),
            obtnf = document.getElementById(obtnf),
            disX = 0,
            disY = 0;        //鼠标按下时开始计算
        obtn.onmousedown = function(ev){            var ev = ev || window.event;
            disX = ev.clientX - obtnf.offsetLeft;
            disY = ev.clientY - obtnf.offsetTop;            //鼠标按下并移动时计算
            document.onmousemove = function(ev){                var ev = ev || window.event;                var lefts= (ev.clientX - disX),
                    tops= (ev.clientY - disY),
                    maxle= (document.documentElement.clientWidth - obtnf.offsetWidth),
                    maxto= (document.documentElement.clientHeight - obtnf.offsetHeight)
                lefts = xianzhi(lefts,maxle,0)
                tops = xianzhi(tops,maxto,0)
                obtnf.style.left = lefts + 'px';
                obtnf.style.top = tops + 'px';
            };            //鼠标松开时清除时间
            document.onmouseup = function(){                document.onmousemove = null;                document.onmouseup = null;
            };            return false;
        };
    };    //引用
    drag("box","btn")

做到这里一个小型的拖拽效果就出来了。


新闻名称:原生JS拖拽效果
标题URL:http://6mz.cn/article/gpepco.html

其他资讯