功能模块

图片放大镜功能

2019-03-22  本文已影响0人  千茉紫依

思路:在图片上面放置一层透明canvas,监听鼠标移入移出事件,移入时根据设置的放大倍数实时绘制canvas,移出时清空canvas

实现:本文中使用到了canvas、vue

一、页面结构

<canvas class="img-over img" ref="canvas" @mousemove="enlargePic" @mouseout="endLarge"></canvas>
<img class="img" :src="img" ref="pic" v-if="showPic" />

//css
.img {
    height: 20rem;
    width: 30rem;
}
.img-over {
     z-index: 4;
}

通过设置z-index实现透明canvas覆盖在图片上面

二、data设置

data() {
        return {
            imgScale: 1.1, //放大倍数
            img:'url',  //图片路径
            showPic: true,  //控制图片显示,移入时显示canvas而不显示图片
            ctx: null   //canvas句柄,移入时将他设置,移出时将他清空
        };
    }

三、函数

        /*当鼠标移入时触发*/
        enlargePic(e) {
            this.showPic = false;   //图片隐藏
            let pic = new Image();  //新建Image对象pic
            pic.src = this.img;   //将img拷贝至pic,这样做能优化运算速度
            let canvas = this.$refs.canvas; //获取页面canvas元素
            this.ctx = canvas.getContext('2d'); //新建2d绘图
            //初始化,将绘图清空,避免历史残留图像造成影响
            this.ctx.clearRect(0, 0, canvas.width, canvas.height);
            //将用户点击时的页面坐标,转化成canvas内部坐标
            //canvas.getBoundingClientRect()能够取到canvas距离页面边距的left等值
            let coordInCanvas = {
                x: e.clientX - canvas.getBoundingClientRect().left,
                y: e.clientY - canvas.getBoundingClientRect().top
            };
            /*对canva进行放大处理,newSize指图片显示的部分区域,区域变小,
              但尺寸不变,图片就会呈现放大效果*/
            let newSize = {
                width: canvas.width / this.imgScale,
                height: canvas.height / this.imgScale
            };
            //以用户鼠标为中心,以新尺寸,确定新的绘图起点
            let newX = coordInCanvas.x - newSize.width / 2;
            let newY = coordInCanvas.y - newSize.height / 2;
            //在图片中截取一个区域覆盖原图片
            this.ctx.drawImage(
                pic,
                newX,
                newY,
                newSize.width,
                newSize.height,
                0,
                0,
                canvas.width,
                canvas.height
            );
        },

         /*当鼠标移出时触发*/
        endLarge() {
             //获取页面canvas元素
            let canvas = this.$refs.canvas;
             //擦除canvas
            this.ctx.clearRect(0, 0, canvas.width, canvas.height);
             //显示原始图片
            this.showPic = true;
        },

图片放大镜功能完成

上一篇 下一篇

猜你喜欢

热点阅读