赞
踩
如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序是不能颠倒的。
1.onmousedown:鼠标按下事件
2.onmousemove:鼠标移动事件
3.onmouseup:鼠标抬起事件
拖拽的基本原理就是根据鼠标的移动来移动被拖拽的元素。event.clientX
和event.clientY
分别是鼠标当前的横坐标和纵坐标,offsetX
和 offsetY
分别表示元素的初始横坐标和纵坐标,元素的移动就是style.position的top和left的改变。当然,并不是任何时候移动鼠标都要造成元素的移动,而应该判断鼠标左键的状态是否为按下状态,是否是在可拖拽的元素上按下的。
代码:
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <title>Lazyload</title>
- <style>
- .drag {
- background-color: skyblue;
- position: absolute;
- line-height: 100px;
- text-align: center;
- width: 100px;
- height: 100px;
- }
- </style>
- </head>
- <body>
- <!-- left和top要写在行内样式里面 -->
- <div class="drag" style="left: 0; top: 0">按住拖动</div>
- <script src="./jquery-3.6.0.min.js"></script>
- <script>
- // 获取DOM元素
- let dragDiv = document.getElementsByClassName('drag')[0]
- // 鼠标按下事件 处理程序
- let putDown = function (event) {
- dragDiv.style.cursor = 'pointer'
- let offsetX = parseInt(dragDiv.style.left) // 获取当前的x轴距离
- let offsetY = parseInt(dragDiv.style.top) // 获取当前的y轴距离
- let innerX = event.clientX - offsetX // 获取鼠标在方块内的x轴距
- let innerY = event.clientY - offsetY // 获取鼠标在方块内的y轴距
- // 鼠标移动的时候不停的修改div的left和top值
- document.onmousemove = function (event) {
- dragDiv.style.left = event.clientX - innerX + 'px'
- dragDiv.style.top = event.clientY - innerY + 'px'
- // 边界判断
- if (parseInt(dragDiv.style.left) <= 0) {
- dragDiv.style.left = '0px'
- }
- if (parseInt(dragDiv.style.top) <= 0) {
- dragDiv.style.top = '0px'
- }
- if (
- parseInt(dragDiv.style.left) >=
- window.innerWidth - parseInt(dragDiv.style.width)
- ) {
- dragDiv.style.left =
- window.innerWidth - parseInt(dragDiv.style.width) + 'px'
- }
- if (
- parseInt(dragDiv.style.top) >=
- window.innerHeight - parseInt(dragDiv.style.height)
- ) {
- dragDiv.style.top =
- window.innerHeight - parseInt(dragDiv.style.height) + 'px'
- }
- }
- // 鼠标抬起时,清除绑定在文档上的mousemove和mouseup事件
- // 否则鼠标抬起后还可以继续拖拽方块
- document.onmouseup = function () {
- document.onmousemove = null
- document.onmouseup = null
- }
- }
- // 绑定鼠标按下事件
- dragDiv.addEventListener('mousedown', putDown, false)
- </script>
- </body>
- </html>
html5中drag和drop实现拖拽后续会更新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。