JS操作DOM

173 阅读1分钟

一、JS实现拖拽窗口

1、写法思路

  • 先画个定位的DIV
  • 监听Mousedown mouseup mousemove
  • 定义一个变量来标记是否按下
  • 在Move中判断如果按下,则将鼠标位置赋值给div
  • 按下时记录鼠标与div的相对位置,移动时6.减去这段距离
  • 在move时阻止默认行为,防止拖动文字有Bug
  • 监听blur事件,防止窗口失去焦点导致bug

2、代码展示

<style>
 #demo {
            width: 300px;
            height: 300px;
            background: pink;
            position: absolute;
        }
</style>
<body>
<div id="demo"></div>
<script>
let demo = document.querySelector('#demo')
let canMove = false
        let x=0 , y=0
        demo.onmousedown = function (e) {
            x = e.pageX - demo.offsetLeft
            y = e.pageY - demo.offsetTop
            canMove = true
            }
            demo.oncontextmenu = function (e) {
            e.preventDefault()
            console.log('右键了');
        }
         setTimeout(() => {
        },2000);
        window.onmouseup = function () {
            canMove = false
        }
        window.onblur = function () {
            canMove = false
        }
        window.onmousemove = function (e) {
            e.preventDefault();
            if(canMove){
                let left = e.pageX - x
                let top = e.pageY - y
                if (left < 0) left = 0
                if (top < 0) top = 0
                let maxLeft = window.innerWidth - demo.offsetWidth
                let maxTop = window.innerHeight - demo.offsetHeight
                if (left > maxLeft) left = maxLeft
                if (top > maxTop) top = maxTop
                demo.style.left = left + "px"
                demo.style.top = top  + 'px'
            }
        }
<script>
<body>