首页 > 其他分享 >Vue实现div可拖动组件 并可操纵盒子大小

Vue实现div可拖动组件 并可操纵盒子大小

时间:2023-03-11 09:12:04浏览次数:59  
标签:style Vue oDiv px let 可操纵 div event

Vue实现div可拖动组件 并可操纵盒子大小

借鉴文章:https://blog.csdn.net/qq_46103732/article/details/128902192

  • 场景:在pc端项目中会碰到弹框后多个页面重叠的场景,类似于电脑打开多个文件夹,这时想要同时完整的展示两个页面的内容,就可以拖动页面,改变位置
  • 注意: 本文是进行封装全局组件,可以供给全局使用
  • 功能: 实现div可拖拽并且可以控制其高与宽

实现拖拽功能

1.在src下新建文件夹 until 并新建 drag.js 文件 作为工具函数所使用

2.在 main.js 中进行方法注册

import directive from './util/drag'
 
Vue.use(directive)

3.编写 drag.js

export default (Vue) => {
    Vue.directive("drags", {
        inserted: function (el) {
            let oDiv = el // 获取当前元素
            oDiv.onmousedown = (e) => {
                    // 算出鼠标相对元素的位置
                    let disX = e.clientX - oDiv.offsetLeft

                    let disY = e.clientY - oDiv.offsetTop
                    console.log("disX", disX, "disY", disY);

                    document.onmousemove = (e) => {
                        // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
                        let left = e.clientX - disX

                        oDiv.style.left = left + 'px'

                        let top = e.clientY - disY
                        oDiv.style.top = top + 'px'
                    }
                    document.onmouseup = (e) => {
                        document.onmousemove = null
                        document.onmouseup = null
                        oDiv = el

                    }
                },
              
        }
    })
}

4.组件中使用

<div v-drags class="box box2" style="width: 200px; height: 200px;"></div>

注意点:

  • v-drags 是进行绑定自定义指令
  • 行内书写style才能被 oDiv.style 所识别到
  • 并且需要给盒子使用 absolute 定位
.box {
    position: absolute;
    width: 200px;
    height: 200px;
}

实现div体积变化功能

  oDiv.onmousewheel = function (event) {
          //判断鼠标滚轮滚动的方向
		event = event || window.event;
//alert(event.wheelDelta);向上120,向下-120
	if (event.wheelDelta > 0 || event.detail < 0) { 
        //火狐event.detail  向上滚动-3 向下滚动+3
		oDiv.style.width = (parseInt(oDiv.style.width) + 5).toString() + 'px'
		oDiv.style.height = (parseInt(oDiv.style.height) + 5).toString() + 'px'
       
	} else {
        
		oDiv.style.width = (parseInt(oDiv.style.width) - 5).toString() + 'px'
         oDiv.style.height = (parseInt(oDiv.style.height) - 5).toString() + 'px'
     }
   return false;
};
  • oDiv.onmousedown 同级

标签:style,Vue,oDiv,px,let,可操纵,div,event
From: https://www.cnblogs.com/Dollom/p/17205229.html

相关文章

  • vue3请求编写规范
    vue3请求编写规范使用的是模块化的组件式API界面request(请求文件夹)总文件夹中包含了对应的接口文件xxxx.ts包含了管理最底层请求的request.ts包含了......
  • vue動態產生div及v-model數據綁定
    html模板遍歷會涉及到v-model對值的綁定,這里的思路是根據數組中的下標尋找對應行數據<divclass="row"v-for="item,indexinitems"><divclass="col-3">......
  • vue+leaflet示例:地图分屏对比展示(附源码下载)
    demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。运行工具:vscode或者其他工具。配置方式:下载demo源码,vscode打开,然后顺序执行以下命令:(1)......
  • Vue————Vue v2.7.14 入口文件【二】
    前言按着我的习惯,拿到一个项目首先我会查看项目下的README.md其次查看package.json,这里也不例外看过README.md后,来看下package.json;GitHubgithubpage内容package.......
  • Vue——Vue v2.7.14 源码阅读之代码目录结构【一】
    前言这里主要说一些vue2.7.14源码的目录结构,其实这块有些目录并不重要,不过我还是想全面的描述下,详细的一些文件说明会随着源码解读来补充完善,其中描述如果有错的地方还......
  • 记录--vue3+setup+ts 知识总结
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助vue3于2020年09月18日正式发布,2022年2月7日vue3成为新的默认版本距离vue3正式发布已......
  • 解决vue中v-html元素中标签样式失效问题
    最近在项目中遇到移动端和pc端样式冲突的问题。加上scoped会导致v-html下绑定的标签样式不生效、第三方引用的类库对其修改也不生效,特此总结一下几点,用来解决: Vue为v-......
  • vue react框架
      Vue、React框架的价值(共同点)组件化数据视图分离,数据驱动视图——这是核心!只关注业务数据,而不用再关心DOM变化  vdom并不快,js操作DOM才是最快的但“数据......
  • 浅谈Vue3与Vue2区别
    1.Vue2选用选项式API(optionsapi)对比Vue3组合式API(CompositionApi)optionsapi在代码里分割了不同的属性(properties):data,computed属性,methods,选项所定义的属性都会暴露......
  • vue如何通过$router.push传参数
    如何通过$router.push传参数下面通过A页面向B页面传值来举个例子://A页面:this.$router.push({name:'页面B',params:{data:'我是要传递的参数'}})//B......