vue内容拖拽放大缩小
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Document</title>
- <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
- </head>
- <body>
- <div id="app">
- <div id="drag" @mousewheel="changeCanvas($event)"
- @mousedown="mouseDrag($event)" @dragover="allowDrop($event)" @dragenter="dragEnter($event)"
- @mouseup="mouseUp($event)" @mousemove="mouseMove($event)">
- <div id="flowContainer" ref="flowContainer"></div>
- </div>
- </div>
- <script>
- new Vue({
- el: '#app',
- data() {
- return {
- msg: '111',
- zoomNum: 1,
- disX: null,
- disY: null,
- mainX: null,
- mainY: null,
- ifDrag: false,
- }
- },
- methods: {
- allowDrop(evt) {
- this.preventDefault(evt);
- },
- dragEnter(evt) {
- this.preventDefault(evt);
- },
- //阻止冒泡以及默认事件
- preventDefault(ev) {
- var evt = ev || window.event;
- if (typeof evt.preventDefault == "function") {
- evt.preventDefault();
- } else {
- evt.returnValue = false;
- }
- if (typeof evt.stopPropagation == "function") {
- evt.stopPropagation();
- } else {
- evt.cancelBubble = true
- }
- },
- // ==漫游====
- // 拖拽
- mouseDrag(e) {
- // console.log('拖拽',e);
- this.linemove = false
- // console.log(e)
- let _this = this;
- this.ifDrag = true;
- let pos = _this.getPos(e); //获取鼠标坐标
- _this.disX = pos.x;
- _this.disY = pos.y;
- _this.mainX = _this.$refs.flowContainer.offsetLeft;
- _this.mainY = _this.$refs.flowContainer.offsetTop;
- // if (this.ifDrag) {
- // this.mouseMove(e);
- // }
- },
- mouseMove(e) {
- // console.log('move', document)
- var _this = this;
- // document.onmousemove = function (e) {
- // debugger
- // console.log(e)
- // e.preventDefault()
- if (!this.ifDrag) {
- return
- }
- var evt = window.event || e;
- var left = (evt.clientX - _this.disX) + _this.mainX;
- var top = (evt.clientY - _this.disY) + _this.mainY;
- _this.$refs.flowContainer.style.left = left + 'px';
- _this.$refs.flowContainer.style.top = top + 'px';
- // }
- // this.mouseUp();
- },
- mouseUp() {
- // console.log('up', document.onmousemove)
- var _this = this;
- this.ifDrag = false
- //鼠标抬起
- document.onmouseup = function (e) {
- // console.log(e)
- var evt = window.event || e;
- // document.onmousemove = null;
- // document.onmouseup = null;
- // _this.ifDrag = false;
- };
- },
- // 获取位置
- getPos(ev) {
- let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
- return { x: ev.clientX + scrollLeft, y: ev.clientY + scrollTop };
- },
- // 改变画布大小--通过鼠标滚轮 缩小,放大
- changeCanvas(event) {
- var delta = 0;
- var canvasDom = document.getElementById('flowContainer');
- var p = ["webkit", "moz", "ms", "o"];
- if (!event) event = window.event;
- if (event.wheelDelta) {//IE、chrome浏览器使用的是wheelDelta,并且值为“正负120”
- delta = event.wheelDelta / 120;
- if (window.opera) delta = -delta;//因为IE、chrome等向下滚动是负值,FF是正值,为了处理一致性,在此取反处理
- } else if (event.detail) {//FF浏览器使用的是detail,其值为“正负3”
- delta = -event.detail / 3;
- }
- if (delta > 0) {
- // 向上滚
- if (this.zoomNum < 2) {
- this.zoomNum += 0.1;
- }
- } else if (delta < 0) {
- // 向下滚
- if (this.zoomNum > 0.2) {
- this.zoomNum -= 0.1;
- }
- }
- for (var i = 0; i < p.length; i++) {
- canvasDom.style[p[i] + "Transform"] = "scale(" + this.zoomNum + ")";
- }
- canvasDom.style["transform"] = "scale(" + this.zoomNum + ")";
- return false;
- },
- }
- })
- </script>
- </body>
- <style>
- #drag{
- width:800px;
- height:800px;
- background:blue;
- overflow:hidden;
- }
- #flowContainer{
- width:300px;
- height:300px;
- background:red;
- position: relative;
- overflow: hidden;
- left: 20px;
- top: 20px;
- transform-origin: 50% 50%;
- }
- </style>
- </html>
vue内容拖拽放大缩小
vue内容拖拽放大缩小的更多相关文章
- 基于Vue实现拖拽效果
参考地址:基于Vue实现拖拽效果 参考链接中讲的比较详细,我只使用了其中自定义指令的方法.整体代码如下: <template> <!-- 卡片 --> <div clas ...
- Vue 可拖拽组件 Vue Smooth DnD 详解和应用演示
本文发布自 https://www.cnblogs.com/wenruo/p/15061907.html 转载请注明出处. 简介和 Demo 展示 最近需要有个拖拽列表的需求,发现一个简单好用的 Vu ...
- vue的拖拽文件
<div ref='select_frame' ondragstart="return false">//防止跳转 </div> this.$refs.se ...
- vue列表拖拽排序功能实现
1.实现目标:目标是输入一个数组,生成一个列表:通过拖拽排序,拖拽结束后输出一个经过排序的数组. 2.实现思路: 2.1是使用HTML5的drag功能来实现,每次拖拽时直接操作Dom节点排序,拖拽结束 ...
- vue实现拖拽组件
可以拖拽,靠边停靠,效果图如下 代码如下: 注意:代码中使用的图片未上传 DragAndDrop组件: <template> <div class="drag" ...
- vue实现拖拽排序
基于vue实现列表拖拽排序的效果 在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果:这里提供一种简单的实现方案. 此例子基于vuecli3 首先,我们先了解一下js原生拖动事件: 在拖动目标 ...
- vue 图片拖拽和滚轮缩放
这里注意如果自己的页面有滚动条,一定阻止滚动事件的默认行为,否则缩放图片的时候,页面会跟着滚动@mousewheel.prevent 阻止默认行为 <div ref="imgWrap& ...
- Vue实现拖拽穿梭框功能四种方式
一.使用原生js实现拖拽 点击打开视频讲解更加详细 <html lang="en"> <head> <meta charset="UTF-8 ...
- vue模块拖拽效果
正巧在之前面试中遇到问实现拖拽效果 当时面试的时候简单回答了实现的方式与逻辑. 现在闲来无事,把这个东西实现了一下. 原理很简单,写的很方便. 数据驱动,建立一个数组,数组初始长度为1 拖动触发时,添 ...
随机推荐
- FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言
之前文章分享FastAPI(七十二)实战开发<在线课程学习系统>接口开发-- 留言列表开发,这次我们分享如何回复留言 按照惯例,我们还是去分析这里面的逻辑. 1.判断用户是否登录 2.用户 ...
- spring-注入集合对象
1.创建Stu类 package com.spring.collections; import java.util.Arrays; import java.util.List; import java ...
- Spring框架技术
Spring框架技术 SSM(Spring+SpringMVC+Mybatis)阶段的学习,也算是成功出了Java新手村. 前面我们已经学习过Mybatis了. 从这里开始,很多的概念理解起来就稍微有 ...
- Java基础之浅谈集合
Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...
- 帝国cms修改成https后后台登陆空白的解决办法
以下方法适用帝国cms7.5版本: 7.5版本已经有了http和https自动识别,但是因为一些疑难杂症的原因,自动识别判断的不准,后台登录也是空白, 我们可以打开e/config.php查找'htt ...
- 羽夏壳世界—— PE 结构(上)
羽夏壳世界之 PE 结构(上),介绍难度较低的基本 PE 相关结构体.
- Java学习day6
今天跟着教学视频做了个简易的学生管理系统 在编写完全部代码之后出现了在空白处右键没有run as选项的问题,通过csdn与博客园上的多个帖子介绍,得知是jdk配置不对,正确配置后问题得到解决 明天学习 ...
- 3种方法改变this的指向
<body> <div style="width: 200px;height: 200px;hotpink;"></div> & ...
- Java语言学习day37--8月12日
今日内容介绍1.List接口2.Set接口3.判断集合唯一性原理 ###01List接口的特点 A:List接口的特点: a:它是一个元素存取有序的集合. 例如,存元素的顺序是11.22.33.那么 ...
- ASP.NETCore统一处理404错误都有哪些方式?
当未找到网页并且应用程序返回 404 错误时,ASP.NET Core MVC 仅呈现通用浏览器错误页面,如下图所示 这不是很优雅,是吗? 我们平时看到的404页面一般是这样的 还有这样的 试了下京东 ...