原生js实现拖拽效果

在这里插入图片描述

<!DOCTYPE html>  
<html>  
<head>  <style>  #mydiv {  width: 200px;  height: 200px;  background-color: red;  position: absolute;  cursor: move;  }  </style>  |
</head>  
<body>  <div id="mydiv">拖拽我</div>  <script>  var mydiv = document.getElementById('mydiv');  var x = 0, y = 0;  var limitX = window.innerWidth - 200; // 设置元素的最大宽度为屏幕宽度减去元素的宽度  var limitY = window.innerHeight - 200; // 设置元素的最大高度为屏幕高度减去元素的高度  mydiv.onmousedown = function(e) {  x = e.clientX - mydiv.getBoundingClientRect().left;  y = e.clientY - mydiv.getBoundingClientRect().top;  document.onmousemove = function(e) {  var newX = e.clientX - x;  var newY = e.clientY - y;  if (newX < 0) newX = 0; // 防止元素向左拖出屏幕外  if (newY < 0) newY = 0; // 防止元素向上拖出屏幕外  if (newX > limitX) newX = limitX; // 防止元素向右拖出屏幕外  if (newY > limitY) newY = limitY; // 防止元素向下拖出屏幕外  mydiv.style.left = newX + 'px';  mydiv.style.top = newY + 'px';  };  document.onmouseup = function() {  document.onmousemove = null; // 当鼠标松开时,移除鼠标移动事件  };  };  </script>  
</body>  
</html>
<template><div class="drag-box"><div id="dragContent"><div class="drag-home"><div class="drag-title" v-show="titleVisible"><br><br></div><div class="drag-switch"><div class="message"><div class="name">液压支架</div><div class="info">当前操作:前立柱升</div><div class="info">当前操作:前立柱升</div></div><div class="drag-button"><div class="menu"><el-button type="primary" round>采煤机</el-button><el-button type="success" round>液压知己</el-button><el-button type="info" round>总控开关</el-button></div><div class="stats"><el-button type="success" round v-for="(item, index) in 9" :key="index" style="width: 8rem;">按钮{{ item }}</el-button><i v-for="item in 9" :key="item"></i></div><div class="submit"><el-button type="primary" round>启动</el-button><el-button type="success" round>停止</el-button></div></div></div></div></div></div>
</template><script>
import { reactive, toRefs, onBeforeMount, onMounted, getCurrentInstance } from 'vue'export default {components: {},setup() {const state = reactive({rightDistance: '',leftWidth: '',maxWidth: '',titleVisible: false})onBeforeMount(() => {})onMounted(() => {var dragContent = document.getElementById('dragContent');var x = 0, y = 0;var limitX = window.innerWidth - 400; // 设置元素的最大宽度为屏幕宽度减去元素的宽度  state.maxWidth = limitXvar limitY = window.innerHeight - 600; // 设置元素的最大高度为屏幕高度减去元素的高度  var box = document.getElementById("dragContent")box.addEventListener('mouseover', () => {if (state.drightDistance == 0) {box.style.left = `${state.maxWidth / 10}rem`box.style.transitionDuration =  '1s'setTimeout(() => {state.titleVisible = false}, 300)} else {box.style.transitionDuration =  '0s'}})box.addEventListener('mouseout', () => {if (state.drightDistance == 0) {box.style.left = `${state.maxWidth / 10 + 40}rem`box.style.transitionDuration =  '1s'setTimeout(() => {state.titleVisible = true}, 300)} else {box.style.transitionDuration =  '0s'}});dragContent.onmousedown = (e) => {x = e.clientX - dragContent.getBoundingClientRect().left;y = e.clientY - dragContent.getBoundingClientRect().top;document.onmousemove = function (e) {var newX = e.clientX - x;var newY = e.clientY - y;if (newX < 0) newX = 0; // 防止元素向左拖出屏幕外  if (newY < 0) newY = 0; // 防止元素向上拖出屏幕外  if (newX > limitX) newX = limitX; // 防止元素向右拖出屏幕外  if (newY > limitY) newY = limitY; // 防止元素向下拖出屏幕外  dragContent.style.left = newX + 'px';dragContent.style.top = newY + 'px';state.leftWidth = newXstate.drightDistance = limitX - newX// console.log(state.leftWidth)};document.onmouseup = () => {document.onmousemove = null; // 当鼠标松开时,移除鼠标移动事件  console.log('当前坐标点', state.drightDistance)if (state.drightDistance == 0) {}}}})return {...toRefs(state),}}
}
</script>
<style lang="scss" scoped>
.drag-box {width: 100%;height: 100vh;overflow: hidden;position: absolute;
}#dragContent {width: 400px;height: 600px;position: absolute;right: 8rem;top: 50%;cursor: move;.drag-home {height: 100%;position: relative;background-color: #091659;border-radius: 3rem;.drag-title {position: absolute;left: -4rem;top: calc(50% - 8rem);font-size: 2rem;width: 4rem;height: 16rem;background: #0b133d;display: flex;align-items: center;justify-content: center;border-radius: 1rem 0 0 1rem}.drag-switch {height: 100%;position: relative;.message {text-align: left;padding: 2rem;.name {font-size: 2.5rem;margin: 0.5rem 0;}.info {font-size: 1.4rem;margin: 0.3rem 0;}}.drag-button {height: 80%;background: #22387b;position: absolute;bottom: 0;width: 90%;left: 5%;border-radius: 2rem;.menu {margin: 1rem 0;height: 10%;}.stats {height: 75%;/*background: pink;*/justify-content: space-around;align-content: start;display: flex;flex-wrap: wrap;.el-button {margin: 1rem 0;}.el-button+.el-button {margin-left: unset;}i {margin: 1rem 0;width: 8rem;}}.submit {height: 15%;}}}}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是信噪比

大家好&#xff0c;今天给大家介绍什么是信噪比&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 “信噪比”是电子技术中经常用到的一个词组&#xff0c;知道它的确切含义有一定意…

vivado18.3和modelsim关联

版本关系 首先明确Modelsim与Vivado的联合仿真需要版本号相匹配&#xff0c;Xilinx官方文档UG973中给出了所有版本的Vivado兼容Modelsim的版本情况 Vivado版本号Modelsim版本号Vivado Design Suite 2022.2Mentor Graphics ModelSim DE (2022.2)Vivado Design Suite 2022.1Men…

【前端性能优化】如何取消http请求

文章目录 需要取消http请求的3种经典场景原生XMLHttpRequest取消http请求fetch取消http请求axios取消http请求哪些情况需要取消HTTP请求取消http请求能带来哪些性能提升 需要取消http请求的3种经典场景 场景一&#xff1a;有一个实时搜索功能&#xff0c;每当用户输入内容改变的…

app开发——安卓native开发思路记录

我们知道app开发目前有三种方式&#xff0c;第一种是webapp&#xff0c;第二种是hybird app&#xff0c;第三种是native app。 而native-app就是安卓原生app&#xff0c;这里记录一下安卓原生开发的基本思路。 首先&#xff0c;安卓原生开发虽然在当今时代不是那么常见了&…

python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250 需求分析 将爬取的数据导入到表格中&#xff0c;方便人为查看。 实现方法 三大功能 1&#xff0c;下载所有网页内容。 2&#xff0c;处理网页中的内容提取自己想要的数据 3&#xff0c;导入到表格中 分析网站结构需要提取的内容 代码 import requests…

[NAND Flash 6.6] NAND FLASH Multi Plane Program(写)操作_multi plane 为何能提高闪存速度

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< Multi Plane 简介 Multi Plane Program 时序图 Multi Plane 提速机理 Multi Plane Program 状态检查 前言 上一篇我们介绍了 NAND FLASH基本编程(写)…

【昕宝爸爸小模块】线程的几种状态,状态之间怎样流转

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

vue中动态给不同表单赋值

这里的业务是通过关联的 id 发送不同的请求获取表单的数据&#xff0c;然后回显到页面中&#xff0c;整个的页面是由多个表单拼接起来的 点击下一步的时候&#xff0c;获取下一个表单的内容。 // 查询getForm(index) {switch (index) {case 0:this.getFromInfo("inputFor…

图鸟Vue3版本部署

无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 分析原因 这个错误信息表明在 VS Code 终端中尝试运行 pnpm install&#xff0c;但系统无法识别 pnpm 命令。这通常表示 pnpm 这个工具没有被正确安装&#xff0c;或者它的可执行文件所在的路径没有被正确…

故障诊断全家桶,看这一篇就够了,精品力荐!

本期推出故障诊断全家桶&#xff0c;包含传统的分析时频诊断方法&#xff0c;依靠数据分解方法的诊断方法&#xff0c;依靠机器学习的诊断方法。还包含了6种适应度函数随意切换的VMD优化方法&#xff0c;16种数据分解方法&#xff0c;包络谱&#xff0c;包络熵等代码。以及作者…

pgAdmin使用教程(postgresql)

如何使用postgresql 要使用 PostgreSQL 数据库&#xff0c;你可以按照以下步骤进行操作&#xff1a; 安装 PostgreSQL&#xff1a;首先&#xff0c;需要在你的计算机上安装 PostgreSQL 数据库。你可以从 PostgreSQL 官方网站上下载适合你操作系统的安装程序&#xff0c;并按照…

剪映国际版,免费无限制使用

随着抖音的爆火短视频的崛起&#xff0c;相信每一个人都感受到了短视频快节奏下的生活洪流。 现如今每个人都能成为自己生活的记录者&#xff0c;每一个人都有掌握着剪辑的基本技能。而剪映就是很多人都会使用的剪辑软件。 相对于PR、AE等剪辑软件来说&#xff0c;作为一款国…

Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程

direct关键字发布订阅模式 基本用法 发布者 import json from rabbitmq import pika import rabbitmq# 建立连接 credentials rabbitmq.PlainCredentials(zhangdapeng,zhangdapeng520, ) # mq用户名和密码 connection_target rabbitmq.ConnectionParameters(host127.0.0.…

【金猿CIO展】步长制药信息化管理与建设中心总经理束炼:IT部门既要懂技术,也要懂业务...

‍ 束炼 本文由步长制药信息化管理与建设中心总经理束炼撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化转型的浪潮席卷各行各业&#xff0c;中国数字经济已进入快速发展阶…

水浒传之Screen的传奇-Linux/FreeBSD终端下的多窗口复用

缘起 梁山泊大厅 宋江&#xff08;梁山泊头领&#xff09;&#xff1a;各位兄弟&#xff0c;今日我们梁山好汉齐聚一堂&#xff0c;可是有大事要商量。 李逵&#xff08;黑旋风&#xff09;&#xff1a;哥哥&#xff0c;是不是又要有新的任务了&#xff1f;这次我们打谁&am…

架设一台NFS服务器

1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.xxx.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将/home/tom目录仅共享给192.168.xxx.xxx这台主机&#xf…

【翻译转载】What is a Self-Driving Database Management System

What is a Self-Driving Database Management System? cs.cmu.edu/~pavlo/blog/2018/04/what-is-a-self-driving-database-management-system.html#footnote-cidr 概述 一些组织和个人错误地将他们的系统标记为“自动驾驶”。真正的自动驾驶数据库管理系统&#xff08;DBMS…

Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

大于小于 方法1&#xff1a; > 大于 &#xff0c; < 小于 <if test"startTime ! null ">and a.create_time > #{startTime} </if> <if test"endTime ! null ">and a.create_time < #{endTime} </if> 方法2(建议写这…

爬虫的基本原理

基本原理 可以把网页与网页之间的链接关系比作节点中的连线&#xff0c;爬虫可以根据网页中的关系获取后续的网页&#xff0c;当整个网站涉及的页面全部被爬虫访问到后&#xff0c;网站的数据就被访问下来了。 1.爬虫概述 简单点讲&#xff0c;爬虫就是获取网页并提取和保存信…

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载&#xff0c;PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库&#xff08;以最后一个Wolfspeed为例&#xff0c;属于CREE的SiC MOSFET&#xff09; 下载这个就行&#xff0c;都包含了。不信自己可以试试再下载…