• HTML5 Canvas图像放大、移动实例1


    1.前台代码

    <canvas id="canvasOne" class="myCanvas" width="500" height="500"></canvas>
    <script>
        /***************绘制图像,放大缩小实例******************/
        var canvas = document.getElementById('canvasOne');
        var ctx = canvas.getContext('2d');
        //加载图片
        var scale = 0.1;//缩放比例
        var img = new Image();
        img.onload = function () {
            reShow();
        }
        img.src = '../images/1.jpg';
        //根据缩放比例,显示图片
        function reShow() {
            var cWidth = canvas.width;
            var cHeight = canvas.height;
    
            var iWidth = img.width;
            var iHeight = img.height;
            var width = iWidth * scale;
            var height = iHeight * scale;
    
            //居中显示
            var left = (cWidth - width) / 2;
            var top = (cHeight - height) / 2;
    
            //清空画布极限值 --失败
            //var maxWidth = iWidth > width ? iWidth : width;
            //var maxHeight = iHeight > height ? iHeight : height;
            //var minLeft = left < 0 ? left : 0;
            //var minTop = top < 0 ? top : 0;
            //ctx.clearRect(0,0,cWidth,cHeight);
    
            //清除画布方式2 --失败
            //var number = 1 / scale;
            //var cWidth = canvas.width * number;
            //var cHeight = canvas.height * number;
            //ctx.clearRect(-cWidth, -cHeight, cWidth * 2, cHeight * 2);
    
            //清除画布3
            ctx.clearRect(-spanLeft, -spanTop, canvas.width, canvas.height);
            ctx.drawImage(img, left, top, width, height);
        }
        //滚轮时间
        addMouseWheel(canvas, function (e) {
            var temp = e.delta > 0 ? 0.1 : -0.1;
            scale += temp;
            //缩放极限判断
            scale = scale < 0.1 ? 0.1 : scale;
            scale = scale > 1 ? 1 : scale;
            reShow();
        });
    
        //鼠标移动事件
        //1.有一个鼠标移动,重绘图片的bug
        var oldX = oldY = 0;
        var isMove = false;
        var spanLeft = spanTop = 0;
        canvas.onmousedown = function (e) {
            oldX = e.clientX;
            oldY = e.clientY;
            isMove = true;
        }
        canvas.onmousemove = function (e) {
            if (isMove) {
                var currentX = e.clientX;
                var currentY = e.clientY;
    
                //计算移动的距离
                var spanX = currentX - oldX;
                var spanY = currentY - oldY;
                spanLeft += spanX;
                spanTop += spanY;
                ctx.translate(spanX, spanY);
                reShow();
    
                //记录当前结果
                oldX = currentX;
                oldY = currentY;
            }
        }
        canvas.onmouseup = function (e) {
            oldX = oldY = 0;
            isMove = false;
        }
        canvas.onmouseleave = function (e) {
            oldX = oldY = 0;
            isMove = false;
        }
    
    </script>

    2.绑定鼠标滚轮事件

    //绑定dom  元素的mousewheel 事件
    //并设置 对应滚动的是 e.detlta  >0 向上滚动  <0  向下滚动
    (function (window) {
        window.addMouseWheel = function (dom, hander) {
            if (document.mozHidden !== undefined) {
                //FF
                dom.addEventListener('DOMMouseScroll', function (e) {
                    e.delta = -(e.detail || 0) / 3
                    hander(e);
                })
            } else {
                if (window.addEventListener) {
                    //IE,google 等
                    dom.addEventListener('mousewheel', function (e) {
                        e.delta = e.wheelDelta / 120;
                        hander(e);
                    });
                } else if (window.attachEvent) {
                    // IE 低版本
                    dom.attachEvent('onmousewheel', function (e) {
                        e.delta = e.wheelDelta / 120;
                        hander(e);
                    });
                }
            }
        }
    })(window);

    显示结果:

  • 相关阅读:
    2 实现第一个Django网站 博客
    jeecms支持的freemaker标签大全
    dao 获取表最大排序实现
    spring对数据库特殊字段的支持
    hibernate id生成器配置
    Long与long的比较
    jquery validation ajax 验证
    swfupload用法总结
    oracle对序列的操作
    jquery.layout框架分割线
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5101521.html
Copyright © 2020-2023  润新知