vue实现在页面拖拽放大缩小div并显示鼠标在div的坐标

1、功能要求:

实现在一个指定区域拖拽div,并可以放大缩小,同时显示鼠标在该div里的坐标,如图可示

缩小并拖动

2、实现

bash 复制代码
     <div class="div_content" ref="div_content">
                <div class="div_image" id="pic"
                    :style="{'zoom':zoom,'transform':'translate('+moveX+'px,'+moveY+'px)',}"
                    @mousedown.stop="mousedown($event)" @mousemove="handleMouseMove" @mouseleave="mouseout"
                   >


                </div>

                <div class="div_image_tool">
                    <img src="..." class="div_add " @click="add_img">
                    <div class="heng"></div>
                    <img src="..." class="div_add div_decrease" @click="dec_img">
                </div>
            </div>
            <div class="div_axirs">X:{{ux}} Y:{{uy}}</div>

js代码

bash 复制代码
data(){return{
                ux: 0,
                uy: 0,
                moveX: 0,//X轴移动的距离

                moveY: 0,

                startx: '',//鼠标的初始位置
                starty: '',
                endx: 0,
                endy: 0,
                zoom: 1,//放大的倍数
}
},
methods:{
    add_img() {

                this.zoom <= 10 ? this.zoom = this.zoom + 0.5 : ''
            },
            dec_img() {

                this.zoom > 0.5 ? this.zoom = this.zoom - 0.5 : ''
            },


         mousedown(e) {
                // 绑定mousemove
                this.startx = this.formatXY(e.pageX / this.zoom); this.starty = this.formatXY(e.pageY / this.zoom)
              

                
                document.onmousemove = (e) => {
                    this.moveX = this.formatXY(e.pageX / this.zoom) - this.startx + this.endx

                    this.moveY = this.formatXY(e.pageY / this.zoom) - this.starty + this.endy
                    e.preventDefault()
                };
                document.onmouseup = (e) => {
                    // 解除绑定mousemove

                    document.onmousemove = null;

                    this.endx = this.moveX

                    this.endy = this.moveY;
                }


            },
                   mouseout() {
                var that = this;
                that.ux = 0;
                that.uy = 0;
            },
  
            handleMouseMove(e) {
                this.getAxis(e)
            },
            getAxis(e) {
 
                this.ux = this.formatXY(e.offsetX / this.zoom);
                this.uy = this.formatXY(e.offsetY / this.zoom);
},
   formatXY(num) {
                return num.toFixed(0)
            },
            }

css

bash 复制代码
  .div_content {
          position: relative;
        width: 600px;
        height: 580px !important;
        margin: 0 20px;
        overflow: hidden;
        background: rgb(230, 229, 229);
    }

    .div_image {
        height: 400px;
        width: 400px;
        background: white;
        margin: 100px auto auto 100px !important;
    }
相关推荐
Miketutu16 小时前
Flutter学习 - 组件通信与网络请求Dio
开发语言·前端·javascript
幻影星空VR元宇宙16 小时前
5D影院带来的视觉震撼与娱乐投资价值分析以及球幕影院设备价格揭秘
css·百慕大冒险·幻影星空
QQ40220549617 小时前
python基于vue的大学生课堂考勤系统设计与实现django flask pycharm
vue.js·python·django
光影少年18 小时前
前端如何调用gpu渲染,提升gpu渲染
前端·aigc·web·ai编程
Surplusx18 小时前
运用VS Code前端开发工具完成网页头部导航栏
前端·html
小宇的天下18 小时前
Calibre 3Dstack --每日一个命令day13【enclosure】(3-13)
服务器·前端·数据库
一只小bit19 小时前
Qt 文件:QFile 文件读写与管理教程
前端·c++·qt·gui
午安~婉19 小时前
整理知识点
前端·javascript·vue
军军君0119 小时前
Three.js基础功能学习十二:常量与核心
前端·javascript·学习·3d·threejs·three·三维
m0_7482546620 小时前
CSS AI 编程
前端·css·人工智能