vue 元素拖动,复制,已复制元素可移动,快捷方便,已解决

在这里插入图片描述
在这里插入图片描述

注意:使用当前组件时,请先了解组件代码逻辑
下方组件根据自己的需求来更改响应的元素id,调整代码实现逻辑,这里不过多解释

import Vue from "vue";/*** 拖拽*/
Vue.directive("Drag", (el) => {const moveEl = el;let flag = false;const mouseDown = (e) => {flag = true;let X = e.clientX - el.offsetLeftlet Y = e.clientY - el.offsetTopconst move = (e) => {if (flag) {el.style.cursor = 'move';el.style.marginLeft = '0px';el.style.marginTop = '0px';el.style.left = e.pageX - X + 'px';el.style.top = e.pageY - Y + 'px';}}document.addEventListener('mousemove', move);document.addEventListener('mouseup', (e) => {document.removeEventListener('mousemove', move);});}moveEl.addEventListener('mousedown', mouseDown);
})/*** 复制*/
Vue.directive("Copy", (el) => {const moveEl = el;let copy = false;const mouseDown = (e) => {let X = e.clientX - el.offsetLeftlet Y = e.clientY - el.offsetTopconst move = (e) => {if (!copy) {const imageDiv = document.createElement(el.tagName);imageDiv.className = "image";imageDiv.style.left = e.pageX - X + 'px';imageDiv.style.top = e.pageY - Y + 'px';// 获取元素属性el.getAttributeNames().forEach((name) => {imageDiv.setAttribute(name, el.getAttribute(name));});// 获取元素中内容imageDiv.innerHTML = el.innerHTML;imageDiv.addEventListener('click', (e) => {openIframeWindow(e)})// 已复制元素添加拖拽功能imageDiv.attributes.setNamedItem(document.createAttribute('v-drag'));imageDiv.attributes.setNamedItem(document.createAttribute('v-copy'));setImagesInterval(imageDiv);// 添加复制后元素的拖拽功能imagesDrag(imageDiv);document.getElementsByClassName('content')[0].appendChild(imageDiv);}copy = true;}document.addEventListener('mousemove', move);document.addEventListener('mouseup', (e) => {copy = false;document.removeEventListener('mousemove', move);});}moveEl.addEventListener('mousedown', mouseDown);// 打开iframe窗口function openIframeWindow(e) {document.getElementById('iframe').style.display = 'block';// 显示iframe的div标签document.getElementById('my-iframe').style.display = 'block';// 显示iframe标签document.getElementById('my-iframe').src = './iframe';// 显示iframe标签的src属性document.getElementById('my-iframe').style.width = '19.9rem';// 显示iframe标签的宽document.getElementById('my-iframe').style.height = '20rem';// 显示iframe标签的高document.getElementById('iframe').style.width = '19.9rem';// 显示iframe的div标签的宽document.getElementById('iframe').style.left = e.pageX + 5 + 'px';// 显示iframe的div标签的left属性document.getElementById('iframe').style.top = e.pageY + 5 + 'px';// 显示iframe的div标签的top属性// document.getElementsByClassName('open')[0].style.display = 'block';// 显示打开按钮// document.getElementsByClassName('close')[0].style.display = 'block';// 显示关闭按钮// document.getElementById('title').style.display = 'block';// 显示标题编辑文本框document.getElementById('closeButton').style.left = '0rem';// 设置关闭按钮的left属性document.getElementById('iframe0').style.display = 'block';// 显示iframe0的div通信按钮document.getElementById('iframe1').style.display = 'none';// 显示iframe1的div通信按钮}// 复制后的图片轮播function setImagesInterval(imageDiv) {let count = 0;setInterval(() => {if (count == 0) {imageDiv.getElementsByTagName('img')[0].style.display = 'block';imageDiv.getElementsByTagName('img')[1].style.display = 'none';imageDiv.getElementsByTagName('img')[2].style.display = 'none';count++;} else if (count == 1) {imageDiv.getElementsByTagName('img')[0].style.display = 'none';imageDiv.getElementsByTagName('img')[1].style.display = 'block';imageDiv.getElementsByTagName('img')[2].style.display = 'none';count++;} else if (count == 2) {imageDiv.getElementsByTagName('img')[0].style.display = 'none';imageDiv.getElementsByTagName('img')[1].style.display = 'none';imageDiv.getElementsByTagName('img')[2].style.display = 'block';count = 0;}}, 1000);}// 复制后的图片拖拽function imagesDrag(imageDiv){let flag = false;const mouseDown = (e) => {flag = true;let X = e.clientX - imageDiv.offsetLeftlet Y = e.clientY - imageDiv.offsetTopconst move = (e) => {if (flag) {imageDiv.style.cursor = 'move';imageDiv.style.marginLeft = '0px';imageDiv.style.marginTop = '0px';imageDiv.style.left = e.pageX - X + 'px';imageDiv.style.top = e.pageY - Y + 'px';}}imageDiv.addEventListener('mousemove', move)imageDiv.addEventListener('mouseup', (e) => {flag = false;imageDiv.removeEventListener('mousemove', move)})}imageDiv.addEventListener('mousedown', mouseDown);}
})

全局引用
在这里插入图片描述

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

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

相关文章

云能耗管理系统在某高校建筑系统平台的开发与应用

摘要:依据本项目依托某学院的电能计量管理系统、给水计量监管系统以及供热计量管理系统等基础平台,制订了高等学校建筑能耗综合管理系统平台应用的总体框架和方案,该系统可以对校园建筑的各种用能情况进行实时监测、统计能耗、进行能效分析&a…

如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~)

Python中列表对象使用很方便,用Python编程时,经常会遇到将多个长度相同的列表是针对某一组特定对象的,如何能方便的把这些列表组合起来一起使用呢?ZIP()函数可以方便的解决这个问题。 一、将几个长度相同的列表并列组合 例如&am…

Siemens S7-1500TCPU 运动机构系统功能简介

目录 引言: 1.0 术语定义 2.0 基本知识 2.1 运动系统工艺对象 2.2 坐标系与标架 3.0 运动机构系统类型 3.1 直角坐标型 3.2 轮腿型 3.3 平面关节型 3.4 关节型 3.5 并联型 3.6 圆柱坐标型 3.7 三轴型 4.0 运动系统的运动 4.1 运动类型 4.1.1 线性运动…

若依 3.8.7版本springboot前后端分离 整合mabatis plus

1.去掉mybatis 这一步我没有操作&#xff0c;看别人的博客有说不去掉可能冲突&#xff0c;也可能不冲突&#xff0c;我试下来就没去掉如需要去除&#xff0c;到总的pom.xml中properties标签下的<mybatis-spring-boot.version>x.x.x</mybatis-spring-boot.version>…

flutter生成二维码并截图保存到图库

引入库&#xff1a;flutter_screenutil、image_gallery_saver、qr_flutter弹窗布局 import dart:async; import dart:typed_data; import package/generated/l10n.dart; import package:jade/configs/PathConfig.dart; import package:jade/utils/ImageWaterMarkUtil.dart; im…

k8s局域网通过operator部署rabbitmq

参考&#xff1a;Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像&#xff0c;这里的版本是根…

【Java 多线程】从源码出发,剖析Threadlocal的数据结构

文章目录 exampleset(T value)createMap(t, value);set(ThreadLocal<?> key, Object value)ThreadLocalMap和Thread的关系 全貌 ThreadLocal是个很重要的多线程类&#xff0c;里面数据结构的设计很有意思&#xff0c;很巧妙。但是我们平时使用它的时候常常容易对它的使用…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

kubernetes(K8S)学习(一):K8S集群搭建(1 master 2 worker)

K8S集群搭建&#xff08;1 master 2 worker&#xff09; 一、环境资源准备1.1、版本统一1.2、k8s环境系统要求1.3、准备三台Centos7虚拟机 二、集群搭建2.1、更新yum&#xff0c;并安装依赖包2.2、安装Docker2.3、设置hostname&#xff0c;修改hosts文件2.4、设置k8s的系统要求…

Jetson Orin NX 安装 anaconda、cuda、torch、torchvision

第一次接触踩了不少坑&#xff0c;切忌不要按照常见服务器、电脑的思路安装。 安装 JetPack 套件 JetPack 是 Nvidia为 Jetson 系列开发板开发的一款软件开发包&#xff0c;常用的开发工具基本都有&#xff0c;安装 Jetson 会自动的将匹配版本的CUDA、cuDNN、TensorRT等安装好…

玩电脑突然停电对电脑有影响吗

在现代社会中&#xff0c;电脑已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;当我们正在专注于工作或娱乐时&#xff0c;突然停电可能会给我们带来不小的困扰。那么&#xff0c;玩电脑时突然停电会对电脑产生哪些影响呢&#xff1f;本文将深入探讨这一问题&…

【Java面试题】Redis上篇(基础、持久化、底层数据结构)

文章目录 基础1.什么是Redis?2.Redis可以用来干什么&#xff1f;3.Redis的五种基本数据结构&#xff1f;4.Redis为什么这么快&#xff1f;5.什么是I/O多路复用&#xff1f;6.Redis6.0为什么使用了多线程&#xff1f; 持久化7.Redis的持久化方式&#xff1f;区别&#xff1f;8.…