每日分享!~ 使用js原生方式对拖拉元素(鼠标的事件)

一个元素放置页面上。如何进行拖拉,实现想放哪里就放哪里的效果呢?

效果如下:

 

如果让你写这个效果,你会如何写呢? 

--- 思路分析:我首先想到的是,对这个元素先绑定一个事件。(什么事件? 那当然是鼠标按下时的事件啦? )   那么绑定这个事件具体做啥子呢? 在绑定这个事件之前。我们需要先了解如下几个事情--

  1. 元素如何才能在页面上移动?  (是不是要脱离文档流呢? OK / 这时我们给设置一个position:absolute /  让其绝对定位。  

  2. 获取元素当前距离页面两边的位置 

  3. 获取鼠标距离页面两边的位置 

  4.求得鼠标距离元素边框的距离

  5.在鼠标移动事件中。设置元素的left , top  值 。 便可以使元素动起来啦 。

  6. 在鼠标抬起的时候,清掉鼠标移动和鼠标抬起事件。

 

--- 下面是具体的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: red;
            top:100px ;
            left:100px;
        }
    </style>
</head>
<body>
    <button id="btn">test</button>
    <div id="dv"></div>

    <script>
        //  鼠标点击元素开启监听事件
        dv.addEventListener('mousedown',(e)=>{
            // 计算鼠标箭头和元素的左边缘和上边缘的距离 
            var disX = e.pageX - dv.offsetLeft
            var disY = e.pageY - dv.offsetTop
            // console.log(dv.offsetLeft)
            // 当点击时,会一直触发监听鼠标的移动事件(监听document 
            // document.addEventListener('mousemove', (e) =>{
            //     // console.log(e)  
            //     // 设置元素的移动距离
            //     dv.style.left = e.pageX - disX + 'px'
            //     dv.style.top = e.pageY - disY + 'px'
            // })
            // document.addEventListener('mouseup',(e) =>{
            //     // 移除两个事件 
            //     document.removeEventListener('mosedown',(e) =>{
            //           // console.log(e)  
            //     // 设置元素的移动距离
            //     dv.style.left = e.pageX - disX + 'px'
            //     dv.style.top = e.pageY - disY + 'px'
            //     })
            //     document.removeEventListener('mosueup',() =>{})
            // })
            // // 阻止默认事件
            // console.log(e.preventDefault())
            document.onmousemove = function(e){
                dv.style.left = e.pageX - disX + 'px'
                dv.style.top = e.pageY - disY + 'px'
            }
            document.onmouseup = function(){
                document.onmousemove = document.onmouseup = null
            }
            e.preventDefault()
            // 总结: 使用addEventLister()  在移除事件的实际不方便!! 还是采用普通的事件监听函数~~
        })

    </script>
</body>
</html>      


 好了~~~今天的分享就先到这里啦! 还有一点其他的知识留着明天分享吧!~~~每天分享一点~     2019-04-25 23:15:39

 

值得注意的是:获取距离的几个方法:  如:target.offsetTop /  e.pageY   / 等

posted @ 2019-04-25 23:17  yaogengzhu  阅读(334)  评论(0编辑  收藏  举报