vue3.0 TS 图片能在容器内随意移动 并且能缩放

vue3.0图片在容器内随意移动 并且能缩放

话不多说,先上效果:

1

<div class="content">
    <div class="left">
      <div class="imag" @mousewheel.prevent="rollImg">
        <img @mousedown="move" :src="leftSrc" class='first' :style="{transform: `scale(${zoom})`,left:`0px`,top:`0px`}">
      </div>
    </div>
    <div class="right">
      <div class="imag">
        <img  :src="rightSrc" class='first' :style="{transform: `scale(${zoom})`,left:`${0}px`,top:`${0}px`}">
      </div>
    </div>
   </div>
.imag{
      position: relative;
      width: 100%;
      height: 100%;
      border-radius: 5px;
      border: 1px solid gray;
      overflow: hidden;
    }
    .first {
      position: absolute;
      top: 0;
      left: 0;
     width: 100%;
     height: 100%;
      cursor: move;
    }
    .left{
      width: 49%;
      height: 90%;
      
    }
    .right{
      width: 49%;
      height: 90%;
    }
  const zoom = ref<any>(1.1);
	const leftSrc=ref<string>(''); 
  const rightSrc=ref<string>(''); 
// 移动图片
   function move(e:any) {
    e.preventDefault()
    // 获取元素
    let left = document.querySelector('.imag') as HTMLElement
    let img:any = document.querySelector('.first')
    let imgs:any = document.querySelectorAll('.first')
    let x = e.pageX - img.offsetLeft
    let y = e.pageY - img.offsetTop
    // 添加鼠标移动事件
    left.addEventListener('mousemove', move)
    function move(e:any) {
      imgs.forEach((i:any)=>{
          i.style.left = e.pageX - x + 'px';
          i.style.top = e.pageY - y + 'px';
      })
    }
    // 添加鼠标抬起事件,鼠标抬起,将事件移除
    img.addEventListener('mouseup', function() {
        left.removeEventListener('mousemove', move)
    })
    // 鼠标离开父级元素,把事件移除
    left.addEventListener('mouseout', function() {
        left.removeEventListener('mousemove', move)
    })
  }
   // 缩放图片
   function rollImg(e:any) { 
    //  console.log(5454,e)
    /* 获取当前页面的缩放比 若未设置zoom缩放比,则为默认100%,即1,原图大小 */ 
    let Zoom:any = zoom.value
    /* event.wheelDelta 获取滚轮滚动值并将滚动值叠加给缩放比zoom wheelDelta统一为±120,其中正数表示为向上滚动,负数表示向下滚动 */ 
    Zoom += e.wheelDelta / 1200;
    /* 最小范围 和 最大范围 的图片缩放尺度 */ 
    if (Zoom >= 0.1 && Zoom <100) { 
      zoom.value=Zoom
    }
    console.log('缩放图片',e.wheelDelta,Zoom);
    return false; 
  }
Vue3.0 TS 后台管理系统项目文档 一、项目介绍 该项目是一个使用 Vue3.0 和 TypeScript 开发的后台管理系统。主要功能包括用户登录、权限管理、数据展示、数据编辑等。 二、项目结构 1. src 目录:项目主要代码存放位置 - components:组件目录,存放通用组件和业务组件 - views:视图目录,存放各个页面的逻辑和模板 - utils:工具目录,存放与业务无关的工具函数、网络请求等 - router.ts:路由配置文件 - main.ts:项目入口文件 2. assets 目录:存放静态资源,如图片、样式等 3. types 目录:存放 TypeScript 类型定义文件 三、功能模块 1. 用户登录模块 - 用户名、密码验证 - 登录成功后,保存用户信息到本地 2. 权限管理模块 - 管理员、普通用户权限划分 - 根据不同的权限显示不同的菜单和页面 3. 数据展示模块 - 获取后台数据 - 在页面中展示数据,支持分页和搜索功能 4. 数据编辑模块 - 支持对页面数据的修改、增加和删除操作 四、技术栈 1. Vue3.0:使用 Vue3.0 版本进行开发,享受其更优秀的性能和开发体验 2. TypeScript:使用 TypeScript 进行开发,增强代码的可维护性和可读性 3. Vue Router:用于管理页面的路由跳转和权限控制 4. Vuex:用于状态管理,方便组件间的数据共享和通信 5. Element Plus:使用 Element Plus UI 组件库来构建页面,提供丰富的组件和样式 五、项目配置与启动 1. 安装依赖:使用 npm 或 yarn 安装项目依赖包 2. 配置环境:根据实际需求修改 API 地址和其他配置项 3. 启动项目:运行 npm run serve 或 yarn serve 命令启动项目 六、总结 该项目是一个基于 Vue3.0 和 TypeScript 开发的后台管理系统,具备用户登录、权限管理、数据展示和编辑等功能。通过项目结构、功能模块、技术栈以及项目配置与启动进行了详细说明,希望对项目的开发和使用提供一定的参考和指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值