收藏此站 联系我们 网站
当前位置:首页» 行业新闻 » 【建站服务】泗洪淘宝装修/泗洪京东店铺设计/泗洪拼多多网店装修公司/泗洪企业网店开通申请-网店装修设计-域名申请

【建站服务】泗洪淘宝装修/泗洪京东店铺设计/泗洪拼多多网店装修公司/泗洪企业网店开通申请-网店装修设计-域名申请

作者: 风兰 . 阅读量: 4 . 发表时间:2022-09-21 04:09:42

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


泗洪淘宝装修/泗洪京东店铺设计/泗洪拼多多网店装修公司/泗洪企业网店开通申请-网店装修设计

网站建设.png

    八、状态的保存和恢复

    Saving and restoring state 是绘制复杂图形时必不可少的操作。

    save() 和 restore()

    save 和 restore 方法是用来保存和恢复 canvas 状态的,都没有参数。

    Canvas 的状态就是当前画面应用的所有样式和变形的一个快照。

    1、关于 save() :Canvas状态存储在栈中,每当save()方法被调用后,当前的状态就被推送到栈中保存。

    一个绘画状态包括:

    • 当前应用的变形(即移动,旋转和缩放)

    • strokeStylefillStyleglobalAlphalineWidthlineCaplineJoinmiterLimitshadowOffsetXshadowOffsetYshadowBlurshadowColorglobalCompositeOperation 的值

    • 当前的裁切路径(clipping path


      可以调用任意多次 save方法(类似数组的 push())。

    可以调用任意多次 save方法(类似数组的push())。

    2、关于restore():每一次调用 restore 方法,上一个保存的状态就从栈中弹出,所有设定都恢复(类似数组的 pop())。

    var ctx;function draw(){    var canvas = document.getElementById('tutorial');    if (!canvas.getContext) return;    var ctx = canvas.getContext("2d");    ctx.fillRect(0, 0, 150, 150);   // 使用默认设置绘制一个矩形    ctx.save();                  // 保存默认状态    ctx.fillStyle = 'red'       // 在原有配置基础上对颜色做改变    ctx.fillRect(15, 15, 120, 120); // 使用新的设置绘制一个矩形    ctx.save();                  // 保存当前状态    ctx.fillStyle = '#FFF'       // 再次改变颜色配置    ctx.fillRect(30, 30, 90, 90);   // 使用新的配置绘制一个矩形    ctx.restore();               // 重新加载之前的颜色状态    ctx.fillRect(45, 45, 60, 60);   // 使用上一次的配置绘制一个矩形    ctx.restore();               // 加载默认颜色配置    ctx.fillRect(60, 60, 30, 30);   // 使用加载的配置绘制一个矩形}draw();

    九、变形

    9.1 translate

    translate(x, y)

    用来移动 canvas 的原点到指定的位置

    translate 方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。

    在做变形之前先保存状态是一个良好的习惯。大多数情况下,调用 restore 方法比手动恢复原先的状态要简单得多。又如果你是在一个循环中做位移但没有保存和恢复 canvas 的状态,很可能到最后会发现怎么有些东西不见了,那是因为它很可能已经超出 canvas 范围以外了。

    注意:translate 移动的是 canvas 的坐标原点(坐标变换)。

    var ctx;function draw(){    var canvas = document.getElementById('tutorial1');    if (!canvas.getContext) return;    var ctx = canvas.getContext("2d");    ctx.save(); //保存坐原点平移之前的状态    ctx.translate(100, 100);    ctx.strokeRect(0, 0, 100, 100)    ctx.restore(); //恢复到最初状态    ctx.translate(220, 220);    ctx.fillRect(0, 0, 100, 100)}draw();


我们用它来增减图形在 canvas 中的像素数目,对形状,位图进行缩小或者放大。


scale方法接受两个参数。x,y 分别是横轴和纵轴的缩放因子,它们都必须是正值。值比 1.0 小表示缩 小,比 1.0 大则表示放大,值为 1.0 时什么效果都没有。


默认情况下,canvas 的 1 单位就是 1 个像素。举例说,如果我们设置缩放因子是 0.5,1 个单位就变成对应 0.5 个像素,这样绘制出来的形状就会是原先的一半。同理,设置为 2.0 时,1 个单位就对应变成了 2 像素,绘制的结果就是图形放大了 2 倍。


9.4 transform (变形矩阵)

transform(a, b, c, d, e, f)



a (m11): Horizontal scaling.

b (m12): Horizontal skewing.

c (m21): Vertical skewing.

d (m22): Vertical scaling.

e (dx): Horizontal moving.

f (dy): Vertical moving.

var ctx;

function draw(){

    var canvas = document.getElementById('tutorial1');

    if (!canvas.getContext) return;

    var ctx = canvas.getContext("2d");

    ctx.transform(1, 1, 0, 1, 0, 0);

    ctx.fillRect(0, 0, 100, 100);

}

draw();



十、合成

在前面的所有例子中、,我们总是将一个图形画在另一个之上,对于其他更多的情况,仅仅这样是远远不够的。比如,对合成的图形来说,绘制顺序会有限制。不过,我们可以利用 globalCompositeOperation 属性来改变这种状况。


globalCompositeOperation = type

var ctx;

function draw(){

    var canvas = document.getElementById('tutorial1');

    if (!canvas.getContext) return;

    var ctx = canvas.getContext("2d");

 

    ctx.fillStyle = "blue";

    ctx.fillRect(0, 0, 200, 200);

 

    ctx.globalCompositeOperation = "source-over"; //全局合成操作

    ctx.fillStyle = "red";

    ctx.fillRect(100, 100, 200, 200);

}

draw();

注:下面的展示中,蓝色是原有的,红色是新的。


type 是下面 13 种字符串值之一:


1、这是默认设置,新图像会覆盖在原有图像。


泗洪淘宝装修/泗洪京东店铺设计/泗洪拼多多网店装修公司/泗洪企业网店开通申请-网店装修设计


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务