实现元素拖拽放大缩小_Vue实战067:DOM元素拖拽效果的实现
DOM元素拖拽效果:
当鼠标选中目标元素之后可以将其拖放至指定区域的任意位置,实现的思路主要是通过鼠标事件按下、移动、抬起,摁下鼠标时记录鼠标位置以及元素位置并算出鼠标相对元素的位置,在拖拽时记下当前鼠标的位置从而计算出鼠标移动距离,最后将元素的当前位置赋值给属性el.style.left和el.style.top即可(如果是图片的话加入:e.preventDefault())。
设置left属性
left 属性规定了元素的左边距缘,只有定义了position:relative或absolute属性的元素才有left属性,元素内联样式中设置了left才能通过el.style.left获取或设置相对于具有定位属性(position定义为relative)的父对象的左边距,所以这里我们需要为元素设定position属性。在允许拖拽的区域设置属性position:relative,被拖拽元素设置属性position:absolute。
定义mousedown事件
当鼠标指针移动到元素上方并按下鼠标按键时触发mousedown事件,mousedown事件仅需按键被按下即可发生(click事件按下并松开之后触发),通过该事件中我们可以获取鼠标按下时的元素及鼠标相对该元素的位置。
定义onmousemove事件
当鼠标指针移出指定的元素对象时触发onmousemove事件,通过该事件来获取鼠标移动后的位置及计算出相对于具有定位属性(position定义为relative)的父对象的边距。通过left属性将计算到的边距赋值给当前元素,这样当前元素的位置就移动到了当前鼠标所在的位置了(如果当前元素是img的话会出现新窗口打开的现象,这里我们添加一个preventDefault方法来阻止新窗口打开即可)。
定义onmouseup事件
当鼠标按键被松开时触发onmouseup事件,通过该事件来清除onmousemove和onmouseup事件。因为onmousemove 和onmouseup是用document实现的,为避免出现事件冲突所以最好还是执行完之后清除的好。下面是完成的拖拽方法代码:
自定义拖拽指令
还有一种方法就是将该方法绑定到一个自定义指令,这样就可以通过调用指令的形式来实现拖拽效果,具体的实现方法可以参考文章Vue实战066:自定义指令及使用,有如何定义拖拽指令的实例。
知识拓展:client、 page、screen、 layer、 offset属性的区别
在实现拖拽效果的时候我们需要清楚这几个属性的区别(都是计算鼠标点击的偏移值),我们只有了解了才能实现我们想要的拖拽效果。
功能拓展:放大、缩小、旋转
实现元素的放大、缩小功能可以通过transform属性中的scale参数值来实现,该值用来定义 2D 缩放转换。而旋转功能则可以通过transform属性中的rotate(angle)参数值来实现,该值用来定义 2D 旋转,在参数中规定角度即可。
总结:
以上内容是小编给大家分享的Vue实战067:DOM元素拖拽效果的实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。更多Vue实战技巧可以参考专栏:Vue实战系列,在此也非常感谢大家对小编的支持!
实现元素拖拽放大缩小_Vue实战067:DOM元素拖拽效果的实现相关推荐
- javascript实现对图片的随意拖拽,放大缩小
[JS]基于javascript实现对图片的随意拖拽,放大缩小 最近写项目的过程中需要对图片进行一个操作,点击之后弹出图片,在可定div范围内对图片进行任意拖拽位置和鼠标滚动时对其放大缩小,双击图片恢 ...
- 当前元素_前端系列——获取页面中的DOM元素
这里就聊一下获取页面中DOM元素最基本的两种方法: document.getElementById. 在整个页面中通过元素的Id属性值来获取到这个元素对象,getElementById是获取元素的方法 ...
- jquery ui放大缩小_jQuery拖拽放大缩小插件idrag
插件描述:24行代码,让你的网页元素任意放大.缩小.拖拽.移动 基于jQuery:$(document).mousemove(function(e) { if (!!this.move) { var ...
- vue canvas 拖拽 放大缩小
<template><div ref="tagcanvasbox" class="tagcanvasbox"><canvas re ...
- vue让元素固定_vue 监听dom元素的滚动事件 实现某元素吸顶或者固定位置显示
孤单的是人,寂寞的是心. 这只是我写的一个简单的demo,但是所需数据与逻辑已走通, 拿走就能用的那种,希望你能看完 区域 价格 房型 更多 更多 更多 更多 更多 更多 更多 更多 更多 更多 更多 ...
- Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按
Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; ...
- Vue canvas图形放大缩小
1.第一种办法 利用进度条标签来缩放 <template><div class="hello"><canvas width="1000&qu ...
- vue动效:放大缩小与上下移动
vue动效:放大缩小与上下移动 标题: Vue动效技巧:流畅放大缩小与优雅上下移动 在现代Web开发中,Vue.js已经成为了最受欢迎的JavaScript框架之一.它的简洁性和灵活性使得开发人员能够 ...
- vue放大镜:滑轮滚动放大缩小,可直接使用,无需插件
需求:在vue中用js通过滑轮滚动实现放大缩小功能,此代码可直接使用 效果: 代码: <template><div style="width:300px;height:30 ...
最新文章
- sun服务器清理内存日志_SUN 服务器消除黄灯告警灯详情教程
- 【Matlab】山地建模?立体热度?怎么绘制三维曲面图?
- 机器学习资料合计(二)
- SAP CRM里business partner在订单处理中的determination流程
- 整车厂核心制造系统及数据流
- 【Python】输入任意个数元素并保存至列表
- VS下更新Qt语言家ts文件没反应
- 计算机丢失deferrd.dll怎么解决,被Defer后怎么办?如何在RD调整策略绝地反击?!...
- 《经营的本质》序“经营的逻辑”--读后感及读书笔记
- 浅谈Attention注意力机制
- iOS 根据银行卡号判断银行名称
- AD打印,只打印自己想要的层怎么设置
- 脑部神经系统结构模式图,大脑的神经结构示意图
- 360度全景的地拍如何制作?
- 纯CSS3实现常见的时间进度线(竖立方向)
- Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services
- bo服务器idt和bw链接修改,【SAP_BO】关于Universe和IDT链接数据库的JDBC配置
- 生成学习算法.高斯判别分析(GDA).GDA与Logistic模型
- 安全自动化企业网络架构 (毕设分享)
- 看望月新一证明Abc猜想的正确姿势
热门文章
- Android 使用代码设置selector 的图片或文字颜色
- Springmvc提供的传递数据的方式
- bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
- NVIDIA驱动瘫痪再重装的问题
- XMLHelper 辅助类
- linux运维高频命令汇总
- 索引 | 学堂原创推文汇总-v1
- java时间戳格式_Java时间戳转化为今天、昨天、明天(字符串格式)
- macos php开发环境,macOS 10.13 High Sierra PHP开发环境配置
- linux修改java占用端口号_Linux端口被占用、查看