原生JS拖拽效果

发布时间:2025-05-25 00:34:18 作者:益华网络 来源:undefined 浏览量(1) 点赞(1)
摘要:很多时候我们做网站都会遇到 JS拖拽的需求,今天就按照一个弹出框拖拽作为一个小案例写个JS原生的代码。 按照上面的需求咱们开始制作一个拖拽效果吧。

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

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

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

<div id="box">     <div id="btn">标题</div>     <p>青格勒前端博客!</p>     <p>www.cenggel.com</p></div> <style>     #box{ height:200px; width:200px; background:#999; position:absolute;}    #btn{ height:30px; background:#000; cursor:all-scroll; padding:0 10px; color:#fff;}</style>

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

二、逻辑讲述

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

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

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

三、JS代码部分

<script type="text/javascript">     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")</script> 

最后咱们的效果如下

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

最终JS代码如下:

<script type="text/javascript">     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")

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

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!