• vue 实现图片以鼠标为中心放大,并可以随意在div内拖动


    需求:前端接收后端传过来图片渲染,并且可以直接在渲染的地方,以鼠标滚轮为中心放大图片,还可以随意拖动图片

    调研:目前有很多现成的插件都是,点击图片,然后弹出遮罩层,在遮罩层里面操作,由于不符合需求,就只能自己写了。

    开始使用了css3 的scale ,但是发现自由拖动有bug ,在放大后会导致左侧和上方的图片拖动不下来,类似于溢出隐藏(此出具体不做具体说明)

    实现原理:

    1:在img 外层套一个div ,此div 宽高固定,用来放 放大的img,然后产生滚动条。

    2:计算鼠标相对于图片的位置(注意,此处有坑,不能直接用offsetX,offsetY,因为连续滚动,会导致 offsetX,offsetY 发生变化,导致计算出错)

    3:放大缩小原理就是找到鼠标相对于图片的x ,y 轴的距离然后乘以倍数,动态设置图片的宽高,div 的scrollerLeft ,scrollerTop,使图片相对于div 的位置不变,从而实现效果。

    4:鼠标在图片上随意拖动图片,原来就是动态的计算鼠标移动的x,y 轴的距离,然后动态的设置滚动条的位置

    一:拖动组件:

    1. const dragscroll = (el) => {
    2. el.onmousedown = ev => {
    3. const disX = ev.clientX;
    4. const disY = ev.clientY; // 需要上下移动可以加
    5. const originalScrollLeft = e
  • 相关阅读:
    大理大理!
    适配器模式
    数据抓取-bs4、XPath、pyquery详细代码演示
    Python 实现自动化测试 dubbo 协议接口
    线程的生命周期
    JCEF中js与java交互、js与java相互调用
    【软考篇】中级软件设计师 第五部分
    springboot常用组件的集成
    面试经典150题——Day33
    源码解析Synchronous Queue 这种特立独行的队列
  • 原文地址:https://blog.csdn.net/qq_40247562/article/details/126300744