JS、Vue鼠标拖拽

JS代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    *{margin: 0; padding: 0;}
    #box1{
      width: 100px;
      height: 100px;
      background-color: pink;
      position: absolute;
      top: 0px;
      left: 0px;
    }
  </style>
</head>
<body>
  <div id="box1">
  </div>
  <script>
    window.onload = function() {
      var box1 = document.querySelector('#box1')
      // 鼠标按下
      box1.onmousedown = (e) => {
        // 获取鼠标相对于box元素的位置
        e = e || window.event
        var divX = e.offsetX
        var divY = e.offsetY
        // 鼠标移动,将鼠标位置给到box1
        document.onmousemove = (e) => {
          e = e || window.event
          var x = e.clientX - divX >= 0 ? (e.clientX - divX) : 0
          var y = e.clientY - divY >= 0 ? (e.clientY - divY) : 0
          box1.style.left = x + 'px'
          box1.style.top = y + 'px'
        }
      }
      // 鼠标松开
      box1.onmouseup = () => {
        document.onmousemove = null
      }
    }
  </script>
</body>
</html>

Vue代码:

javascript 复制代码
<template>
	<div class="legend">
		<div class="mouse-drop" style="width: 120px;height: 120px;background: #f78"></div>
	</div>
</template>
<script>
export default {
	mounted() {
		this.mouseDrop()
	},
	methods: {
	    // 鼠标拖拽
	    mouseDrop() {
	      let dom = document.querySelector('.legend')
	      let button = dom.querySelector('.mouse-drop')
	      // 鼠标按下
	      button.onmousedown = (e) => {
	        // 获取鼠标相对于box元素的位置
	        e = e || window.event
	        var divX = e.offsetX
	        var divY = e.offsetY
	        // 鼠标移动,将鼠标位置给到dom
	        document.onmousemove = (e) => {
	          e = e || window.event
	          var x = e.clientX - divX >= 0 ? (e.clientX - divX) : 0
	          var y = e.clientY - divY >= 0 ? (e.clientY - divY) : 0
	          dom.style.left = x + 2 + 'px'
	          dom.style.top = y + 42 + 'px'
	        }
	      }
	      // 鼠标松开
	      button.onmouseup = () => {
	        document.onmousemove = null
	      }
	    },
	}
}
<script>
相关推荐
li35743 小时前
将已有 Vue 项目通过 Electron 打包为桌面客户端的完整步骤
前端·vue.js·electron
Icoolkj4 小时前
VuePress 与 VitePress 深度对比:特性、差异与选型指南
前端·javascript·vue.js
^Rocky5 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
西陵5 小时前
Nx带来极致的前端开发体验——任务编排
前端·javascript·架构
笑鸿的学习笔记6 小时前
JavaScript笔记之JS 和 HTML5 的关系
javascript·笔记·html5
萌萌哒草头将军7 小时前
10个 ES2025 新特性速览!🚀🚀🚀
前端·javascript·vue.js
gnip8 小时前
http缓存
前端·javascript
JohnYan9 小时前
工作笔记 - 微信消息发送和处理
javascript·后端·微信
陈陈爱java9 小时前
Spring八股文
开发语言·javascript·数据库
@大迁世界10 小时前
用 popover=“hint“ 打造友好的 HTML 提示:一招让界面更“懂人”
开发语言·前端·javascript·css·html