所有分类
  • 所有分类
  • 后端开发
CSS3和Canvas缩放、旋转功能全面对比

CSS3和Canvas缩放、旋转功能全面对比

基本上跟canvas是一样,只是说法不一样而已,那既然用法是一样的,我们就来试一下:通俗的将,就是重新定义坐标原点,默认原点是(0,0),用此方法会将原点改成(x,y)虽然canvas没有skew方法,但是transform依然可以做出来

1.缩放功能对比

ctx.strokeStyle = 'red';
ctx.strokeRect(5,5,50,50);
ctx.scale(2,2);
ctx.strokeRect(5,5,50,50);
ctx.scale(2,2);
ctx.strokeRect(5,5,50,50);

CSS3和Canvas缩放、旋转功能全面对比

不管是CSS3还是Canvas,它们俩都能缩放,就像是一个小变身。在CSS3里,你能用scale(sx, sy)来操纵纵横比(两种大小);但在Canvas里,你得用两个数字来分别指明高矮。还有就是,如果X、Y轴缩放一致,那在CSS3里简化下就能搞定,Canvas上可得分别告诉它们两组数值!

.box{
    width:50px;
    height:50px;
    border:1px solid #000;
    margin:20px;
}
.box:hover{
    -webkit-transform:scale(2,2);
}

CSS3和Canvas缩放、旋转功能全面对比

你知道吗?canvas里的缩小放大其实是从头开始的!但有点儿奇怪的是,它会把起点给偏了过去,结果就是图像虽然变瘦或胖了,但是它的边界也会被牵连进去。拿CSS3做对比的话,它就是围绕着那个焦点来缩小放大的,所以边界就不会跟着一起动。

CSS3和Canvas缩放、旋转功能全面对比

.box:hover{
    -webkit-transform:scale(2);
}

还有就是,如果就在Canvas里面要弄一个特殊状况,比如只关注一个不停放大缩小?那就是要用到clearRect()这个方法了。咱们每次要画新东西前都得先擦除以前画的,这样才能看得到新的,同时还能保持那个图形的大小变化。

canvas{ background:#fff; width:300px; height:300px; }

2.旋转功能对比

ctx.strokeStyle = 'red';
ctx.strokeRect(5,5,50,50);

CSS3和Canvas缩放、旋转功能全面对比

旋转啥的,咱们CSS 3和Canvas这俩家伙都会。用CSS 3的话就是用 rotate(angle)把画儿转一圈,angle就是要转多少度啦;但要是Canvas的话,得给它弧度才行,不能直接给角度

        亲,您的浏览器不支持canvas,换个浏览器试试吧!

CSS3和Canvas缩放、旋转功能全面对比

来嗑瓜子哈~ CSS3里边旋转动来动去都是以元素的中心点当基点的哦;然而Canvas就不同了!它有个translate(x,y)魔法技能,能让你随心所欲地调整画布的起点,手艺活儿更酷炫!

var timer = null;
ctx.strokeStyle = 'red';
timer = setInterval(function(){
    ctx.beginPath();
    ctx.scale(1.5,1.5);
    ctx.strokeRect(5,5,50,50);
    ctx.closePath();
},500)

3.平移功能对比

CSS3和Canvas缩放、旋转功能全面对比

CSS3和Canvas都能用translate属性和translate(x,y)方法来实现平移功能。不过它们的原理有点不同!在CSS3里,使用translate就是把元素围绕着自己的中心轴移动,但重心还是原来那个位置;好比你站在一辆车中间,手扶着车门往前走,车门其实没动。但是如果你是在Canvas里用这个方法,那就是要重新设定原点(也可以理解成是你站着的那辆车的新位置),然后再把手(也就是新的元素位置)移动过去。

因为这种差异,使用translate来平移的时候,就算先画好图再玩scale,在Canvas上也还是原来那样子,根本不变的坐标系统。但在CSS3里,元素一旦开始自己平移,就全变样!

var timer = null;
        var num = 1;
        ctx.strokeStyle = 'red';
        timer = setInterval(function(){
            
            if(parseInt(num) >=5){
                clearInterval(timer);
                num =5;    
            }else{
                num +=0.1;
            }
            ctx.clearRect(0,0,canvas.clientWidth,canvas.clientHeight);
            ctx.save();
            ctx.beginPath();
            ctx.scale(num,num);
            ctx.strokeRect(5,5,50,50);
            ctx.closePath();
            ctx.restore();
        },500)

CSS3和Canvas缩放、旋转功能全面对比

4.变换效果混用问题

别在上头乱用transform跟setTransform方法尤其是Canvas上面,很容易搞砸!这俩家伙儿都是只对执行后的画图动作有用,你再看看,一会儿换个形态,一会又换回来,太麻烦了。所以,,我们可以利用一下那个什么保存(save)和恢复(restore)的办法,这样就不用担心混用的问题。

.box{
    width:50px;
    height:50px;
    border:1px solid #000;
    margin:20px;
}
.box:hover{
    -webkit-transform:rotate(30deg);
}

CSS3和Canvas缩放、旋转功能全面对比

CSS3和Canvas其实都是有那些让人眼前一亮的特效的,不过它们毕竟还是有区别的。弄清楚这些不一样的地方,能帮你玩转这类新技能,做出更独特的效果!

ctx.fillStyle = 'red';
ctx.fillRect(0,0,150,50);
ctx.beginPath();
ctx.rotate(30*Math.PI/180);
ctx.strokeRect(0,0,150,50);
ctx.closePath();

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/04/13505.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?