Vue中实现div的任意移动

news2024/12/23 20:48:12

前言

在系统应用中,像图片,流程预览及打印预览等情况,当前视窗无法全部显示要预览的全部内容,设置左右和上下滚动条后,如果用鼠标拖动滚动条,又不太便利,如何用鼠标随意的移动呢?

核心方法及事件

可以借助mousedownmouseupmousemove三个事件来处理内容的移动与起始、结束的控制,再借助getComputedStyle动态设置移动内容的left,top,以实现区域的随意移动。

简单代码示例

<template>
  <div>
    <div style="display: flex; justify-content: center">
      <div class="main">
        
      </div>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue'
onMounted(() => {
  moveNode()
})
function moveNode() {
  const child = document.querySelector('.main')
  let isDragging = false
  let prevX = 0
  let prevY = 0
  child.addEventListener('mousedown', function (e) {
    isDragging = true
    prevX = e.clientX
    prevY = e.clientY
  })
  child.addEventListener('mouseup', function () {
    isDragging = false
  })
  child.addEventListener('mousemove', function (e) {
    if (isDragging) {
      const diffX = e.clientX - prevX
      const left = parseInt(window.getComputedStyle(child).left) || 0
      child.style.left = `${left + diffX}px`
      prevX = e.clientX
      const diffY = e.clientY - prevY
      const top = parseInt(window.getComputedStyle(child).top) || 0
      child.style.top = `${top + diffY}px`
      prevY = e.clientY
    }
  })
}
</script>
<style lang="less" scoped>
.main {
  position: relative;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  height: 500px;
  width: 500px;
  background-color: red;
  cursor: move;
}
</style>

动态演示

在这里插入图片描述

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

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

相关文章

Apache ECharts简介

二十九、Apache ECharts 29.1 介绍 Apache ECharts 是一款基于 JavaScript 的数据可视化图表库&#xff0c;提供直观、生动、可交互、可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 常见效果展示&#xff1a; 1). 柱形图 …

定点整数、小数

文章目录 一、定点整数二、定点小数三、定点小数的加/减运算 一、定点整数 二、定点小数 三、定点小数的加/减运算 对两个定点小数A、B进行加法/减法时&#xff0c;需要先转换为补码 计算机硬件如何做定点小数补码的加法&#xff1a;从最低位开始&#xff0c;按位相加&#x…

【评估分级方法】自然断点法(Python实现全代码)

自然断点法 自然断点法有两个称呼&#xff0c;一个就是直接英文名称&#xff0c;叫做“Natural Breaks”&#xff0c;这就不解释了&#xff0c;还有一个称呼就是ArcGIS里面用的&#xff0c;叫做“Jenks”&#xff0c;主要是来源于它的创造者&#xff1a;乔治弗雷德里克詹克斯&…

Vulhub靶场-KIOPTRIX: LEVEL 1.1

目录 环境配置 端口扫描 漏送发现 漏送利用 提权&#xff08;内核漏洞提权&#xff09; 环境配置 环境配置的过程同主页该专栏第一个靶场&#xff0c;不在赘述。 端口扫描 首先通过arp-scan并根据靶机的mac地址确定靶机的IP地址 然后对靶机进行一个扫描 首先扫描到OpenS…

自动驾驶学习笔记(九)——车辆控制

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…

NI Package Manager创建程序包

NI Package Manager创建程序包 要使用PackageManager创建程序包&#xff0c;即把相关的组件都放在一个目录下&#xff0c;使用命令行创建程序包。 程序包是一个压缩文件&#xff0c;包含要安装到目标位置的所有文件。Package Manager创建的程序包扩展名为.nipkg。可以使用Pack…

QFile文件读写操作QFileInFo文件信息读取

点击按钮选择路径&#xff0c;路径显示在lineEdit中 将路径下的文件的内容放在textEdit中 最后显示出来 &#xff01;file.atend()//没有读到文件尾就一直读 file.readline表示按行进行读 追加的方式进行写 要是重新写的话用file.open(QIODevice::write) 用QFileInFo来读取…

微服务实战系列之Gateway

前言 人类世界自工业革命以来&#xff0c;无论从金融、货币、制度&#xff0c;还是科技、资源、社会各个方面&#xff0c;都发生了翻天覆地的变化。物质极大丰富&#xff0c;从而也推动了科技的极速发展。当计算机问世也仅仅不到80年&#xff0c;而如今我们的生活处处有它的影子…

阿里云ECS11月销量王 99元/年

这一波好像真没得说&#xff0c;老用户居然都有份&#xff0c;买来练习、测试冒似已经够了&#xff01; 阿里云ECS11月销量王 99元/年 2核2G 3M固定带宽不限流量&#xff0c;新老同享&#xff0c;新购、续费同价&#xff0c;开发必备&#xff01; 活动规则 云服务器ECS 云创季…

前端调试只会console.log()?

前言 相信大家在日常开发中调试代码是必不可少的步骤&#xff0c;毕竟谁也不能保证代码不出问题&#xff0c;总得debug一下&#xff0c;输出信息看看数据有没有问题。是不是习惯性console.log(‘XXX’)或者debugger呢。而JavaScript中的console对象提供了丰富的方法用于更灵活…

JAVA小游戏 “拼图”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

io多路复用:select、poll和epoll

1、为什么使用多路复用&#xff1a; 1.1单线程BIO监听socket 多路复用一般用于网络io当中&#xff0c;提到网络io我们肯定能想到socket。如果我们想要一个线程单纯的用向下文的方式监听很多个socket看他是否有事件发生&#xff0c;那这样是不可行。 但上一个socket1没有可读事…

关于2023年编程语言使用排行我的看法

一、2022、2023年编程语言使用排行榜 从这个表格中&#xff0c;我们可以看到Python在两次调查中都排第一。对这件事情&#xff0c;很多人有了不同的看法。一个小粉丝问我&#xff0c;凭什么、又是为什么。下面&#xff0c;我展开我的理解。 二、Python为什么排第一&#xff1f…

[C/C++] 数据结构 LeetCode:用队列实现栈

题目描述: 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元…

【半监督学习】CNN与Transformer的结合

本文介绍了几篇结合使用CNN和Transformer进行半监督学习的论文&#xff0c;CNN&Trans&#xff08;MIDL2022&#xff09;&#xff0c;Semi-ViT&#xff08;ECCV2022&#xff09;&#xff0c;Semiformer&#xff08;ECCV2022&#xff09;. Semi-Supervised Medical Image Seg…

ComText让机器人有了情节记忆

为了让人类与机器人更好地交流&#xff0c;MIT 计算机科学与人工智能实验室的研究员开发了一个名为 ComText 的程序。这款程序给机器人增加了情节记忆&#xff0c;让它们能够接受更加复杂的命令。目前&#xff0c;他们已经在机器人 Baxter 上测试了程序。 机器人没有情景化的记…

.babyk勒索病毒解析:恶意更新如何威胁您的数据安全

导言&#xff1a; 在数字时代&#xff0c;威胁不断进化&#xff0c;其中之一就是.babyk勒索病毒。这种病毒采用高级加密算法&#xff0c;将用户文件锁定&#xff0c;并要求支付赎金以获取解密密钥。本文91数据恢复将深入介绍.babyk勒索病毒的特点、如何应对被加密的数据&#…

Spring Framework IOC依赖查找 - 按名称查找解析

IoC按名称查找共分为三类&#xff1a; 按名称按类型按集合 按名称查找 在Spring Framework中&#xff0c;实时加载和延迟加载是指在容器启动时是否立即实例化bean的不同策略。下面我们将分别介绍这两种加载方式及其应用场景。 tips: 当涉及到懒加载和延时加载时&#xff0…

vue3的Watch使用详解

vue官网提到&#xff1a; watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组&#xff1a; 1.监听单个Ref 2.监听一个getter函数 当然只修x或者y其中一个的值&#xff0c;…

阿里AoneFlow分支管理

分支模式 1.TrunkBased模式 工作方式 TrunkBased 模式是持续集成思想所崇尚的工作方式&#xff0c;它由单个主干分支和许多发布分支组成&#xff0c;每个发布分支在特定版本的提交点上从主干创建出来&#xff0c;用来进行上线部署和 Hotfix&#xff08;补丁&#xff09;。 …