Canvas的应用,图片的移动、旋转、缩放

Canvas的应用,图片的移动、旋转、缩放

借助Canvas类库(zrender)实现对图片的拖拽,旋转,缩放

效果图如下:
效果图

代码如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Zrender</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="jquery-2.1.1/jquery.min.js"></script>
        <script src="zrender/asset/js/esl/esl.js"></script>
        <style type="text/css">
            #mainCanvas{
                margin: 0 auto;
                height: 800px;
                width: 800px;
                min-height: 800px;
                min-width: 800px;
            }
        </style>
    </head>
    <body>
    <div class="container-fluid">
        <div class="col-sm-9 col-sm-offset-12 col-md-10 col-md-offset-2 ">
            <div id="mainCanvas" class="mainCanvas">正在加载中...</div>
        </div>
    </div>

<script type="text/javascript">
    var zr; // 全局可用zrender对象
    var zArea; //区域
    var domMain = document.getElementById('mainCanvas');
    require.config({
        packages: [
            {
                name: 'zrender',
                location: 'zrender/src',
                main: 'zrender'
            }
        ]
    });
    require(
        [
            'zrender',
            'zrender/config',
            'zrender/Storage',
            'zrender/tool/area',
            'zrender/tool/color',
            'zrender/animation/Animation',
            'zrender/shape/Star',
            'zrender/shape/Circle',
            'zrender/shape/Image',
            'zrender/shape/Ring',
            'zrender/shape/BezierCurve'
        ],
    function(zrender, config, Storage, Area, color, Animation, StarShape, CircleShape, ImageShape,RingShape,BezierCurveShape){
            //
            zr = zrender.init( document.getElementById('mainCanvas') );

            //背景底图
            zr.addShape(bgimage = new ImageShape({
                style : {
                    image : "bottom1.png",
                    x : 0,
                    y : 0,
                    width : 800,
                    height : 800,
                    lineWidth : 0
               },
               hoverable : false
            }));                    
        zr.addShape(ring_shape = new RingShape({
                style: {
                    x: 400,
                    y: 400,
                    r0: 165,
                    r :380,
                    brushType : 'both',
                    color : 'rgba(220, 20, 60, 0)',          // rgba supported
                    //strokeColor : color.getColor(5),  // getColor from default palette
                    lineWidth : 1,
                    textPosition :'inside'
                }
            }));
        //添加图片(上图中为了显示效果添加了5张图片,下面代码中只有一次)
        var rotationPI = Math.PI / 180; //旋转角度
        var origin = 1.1;
        zr.addShape(testimg = new ImageShape({
            style : {
                x : 400,
                y : 400,
                image : "jy.png",
                width : 80,
                height : 80
            },
            draggable : true,
            clickable : true,
            onmousewheel: function(params){ //拖动
                var eventTool = require('zrender/tool/event');
                var delta = eventTool.getDelta(params.event);
                var imgx = params.target.style.x; //图片位置 x
                var imgy = params.target.style.y; //图片位置 y
                var imgw = params.target.style.width; //图片宽度 width
                var imgh = params.target.style.height; //图片高度 height
                origin += (delta > 0 ? 1 : -1) * 0.1;
                zr.modShape(params.target.id, {scale : [origin, origin, imgx+imgw/2, imgy+imgh/2]});    
                zr.refresh();
                eventTool.stop(params.event);
            },
            onclick : function(params){
                var imgx = params.target.style.x; //图片位置 x
                var imgy = params.target.style.y; //图片位置 y
                var imgw = params.target.style.width; //图片宽度 width
                var imgh = params.target.style.height; //图片高度 height
                var x = imgx + imgw/2;
                var y = imgy + imgh/2;

                rotationPI = rotationPI > Math.PI * 2 ? rotationPI % (Math.PI * 2) : rotationPI;
                rotationPI += Math.PI * 5 /180;
                 zr.modShape(params.target.id, {
                    rotation: [rotationPI, x, y]
                    });
                zr.refresh();
            },
            ondrift :function( shape, x, y){
                console.info(shape);
            }
        }));
    //获取图片
    ImageURL = function(){
        var ShapeURL = zr.toDataURL();
        return ShapeURL;
    };          
    }
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值