固定框内图片拖动&缩放效果

接上一个文章,因为图片太大,所以加了个图片抓取移动,鼠标滚轮放大的效果
大概效果就是在固定框里面,可以鼠标拖拽这个图片,滚轮缩放
在这里插入图片描述


大概用到了这些方法:鼠标按下,鼠标移动,鼠标松起,鼠标移出
前提是都是position: absolute;
template代码:

@mousedown="svgMousedown"
                                @mousewheel="mousewheel"
                                @mouseup="svgMouseup"
                                @mousemove="svgMousemove"
                                @mouseleave="svgMouseup"
                                :style="`width: ${imgInfo.width}px; height: ${imgInfo.height}px; left: ${moveInfo.left}; top: ${moveInfo.top}; transform: scale(${scale}, ${scale})`"
const svgMousemove = (e) => {
    if (moving.value) {
        moveInfo.value.left = +moveInfo.value.left.toString().replace('px', '') + e.pageX - moveInfo.value.start.x + 'px';
        moveInfo.value.top = +moveInfo.value.top.toString().replace('px', '') + e.pageY - moveInfo.value.start.y + 'px';
        moveInfo.value.start.x = e.pageX;
        moveInfo.value.start.y = e.pageY;
    }
};
const svgMousedown = (e: any) => {
    moveInfo.value.start.x = e.pageX;
    moveInfo.value.start.y = e.pageY;
    moving.value = true;
};
const svgMouseup = (e) => {
    moving.value = false;
    // moveInfo.value.start.x = e.pageX;
    // moveInfo.value.start.y = e.pageY;
};

代码在上面,大概的想法就是,获取一个x轴位置和y轴位置,移动了多少就相应加多少,还有鼠标放大缩小效果:

const slider = ref({
    max: 3,
    min: 0.1,
    step: 0.1,
});
const scale = ref(1);
const mousewheel = (e: any) => {
    let newVal = scale.value;
    if (e.deltaY < 0) {
        newVal += slider.value.step;
    } else {
        newVal -= slider.value.step;
    }
    if (newVal >= slider.value.max) {
        newVal = slider.value.max;
    } else if (newVal <= slider.value.min) {
        newVal = slider.value.min;
    }
    scale.value = newVal;
};

贴上去就完了

补充一下,因为图片太大,所以一开始就设置了scale,以下是在onMounted

scale.value = 0.3;
    let sclwidth = (imgInfo.value.width - imgInfo.value.width * 0.3) / 2;
    moveInfo.value.left = '-' + sclwidth + 'px';
    let sclheight = (imgInfo.value.height - imgInfo.value.height * 0.3) / 2;
    moveInfo.value.top = '-' + sclheight + 'px';

稍微居中了下,不然图片找不到。。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值