原生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.rhkb.cn/news/237976.html

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

相关文章

PostgreSQL认证考试PGCA、PGCE、PGCM

PostgreSQL认证考试PGCA、PGCE、PGCM 【重点&#xff01;重点&#xff01;重点&#xff01;】PGCA、PGCE、PGCM 直通车快速下正&#xff0c;省心省力&#xff0c;每2个月一次考试 PGCE考试通知 &#xff08;2024&#xff09; 一、考试概览 &#xff08;一&#xff09; 报名要…

k8s存储卷之动态

动态pv需要两个组件 1、卷插件&#xff0c;k8s本身支持的动态pv创建不包含NFS&#xff0c;需要声明和安装一个外部插件 Provisioner 存储分配器&#xff0c;动态创建pv&#xff0c;然后根据pvc的请求自动绑定和使用 2、StorageClass&#xff0c;用来定义pv的属性&#xff0c…

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决

目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问&#xff0c;域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性&#xff0c;我们在实现移动端的游戏转微信小程序…

网络地图服务(WMS)详解

文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文&#xff1a;《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务&#xff08;WMS、WFS&#xff09;》。 1.概述 经过前文的介绍&#xff0c;相信我们对WMS/WFS服务已经有了一个非…

vue3.2引用unplugin-vue-components插入,解放开发中import组件

目录 前言引用unplugin-vue-components插件的优缺点优点缺点 unplugin-vue-components插件引入安装插件配置vite配置更新TypeScript配置使用代码位置 总结Q&A 前言 unplugin-vue-components是一个用于Vue.js项目的插件&#xff0c;特别适用于Vite和Webpack构建工具。它的主…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

ES API 批量操作 Bulk API

bulk 是 elasticsearch 提供的一种批量增删改的操作API。 bulk 对 JSON串 有着严格的要求。每个JSON串 不能换行 &#xff0c;只能放在同一行&#xff0c;同时&#xff0c; 相邻的JSON串之间必须要有换行 &#xff08;Linux下是\n&#xff1b;Window下是\r\n&#xff09;。bul…

常见的加密算法

加密算法 AES 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥&#xff0c;具体的加密流程如下图&#xff1a; RSA RSA 加密算法是一种典型的非对称加密算法&am…

阴盘奇门八字排盘马星位置计算方法php代码

如下位置&#xff0c;马星的四个位置。 计算方法&#xff1a; 1。先根据出生年月日&#xff0c;计算得八字四柱。比如 2024年01月09日&#xff0c;四柱为 其中时柱地支为“申” 2。然后根据以下对应的数组&#xff0c;来找到id号&#xff0c;即马星位置。 根据下表来找到&am…

JS实现网页轮播图

轮播图也称为焦点图&#xff0c;是网页中比较常见的网页特效。 1、页面基本结构&#xff1a; 大盒子focus&#xff0c;里面包含 左右按钮ul 包含很多个li &#xff08;每个li里面包含了图片&#xff09;下面有很多个小圆圈 因为我们想要点击按钮&#xff0c;轮播图左右播放&a…

springboot——消息中间件

消息的概念 从广义角度来说&#xff0c;消息其实就是信息&#xff0c;但是和信息又有所不同。信息通常被定义为一组数据&#xff0c;而消息除了具有数据的特征之外&#xff0c;还有消息的来源与接收的概念。通常发送消息的一方称为消息的生产者&#xff0c;接收消息的一方称为…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

docker 安装elasticsearch、kibana、cerebro、logstash

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)

Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&#xff08;3&#xff09; 在 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&#…

大括号内两行公式中,如何左对齐公式的条件

1. 先建立一个大括号&#xff0c;中间设置一个二维矩阵如下&#xff1a; 2. 选中整个矩阵&#xff0c;不要选外面的括号&#xff0c;进行如下操作 3. 选择左侧对齐 即可。

用LM Studio:2分钟在本地免费部署大语言模型,替代ChatGPT

你想在本地使用类似ChatGPT 的大语言模型么&#xff1f;LM Studio 可以帮你2分钟实现ChatGPT的功能&#xff0c;而且可以切换很多不同类型的大语言模型&#xff0c;同时支持在Windows和MAC上的PC端部署。 LM Studio是一款面向开发者的友好工具&#xff0c;特别适合那些想要探索…

华为 HarmonyOS 页面跳转

HarmonyOS 页面跳转 1.新建页面2.添加跳转方法3.实现跳转效果 1.新建页面 我们新建2个页面(page)&#xff0c;一个Hello World页面&#xff0c;一个Hello HarmonyOS页面&#xff0c;注意修改红色框内容&#xff0c;保持一致 2.添加跳转方法 导入导入router模块&#xff0c;页…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

【计算机网络】TCP原理 | 可靠性机制分析(三)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

[redis] redis高可用之持久化

一、Redis 高可用的相关知识 1.1 什么是高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;…