《TypeScript图形渲染实战:2D架构设计与实现》 —3.3.5 CSS盒模型对_viewportToCanvasC

举报
华章计算机 发表于 2019/12/12 19:33:28 2019/12/12
【摘要】 本节书摘来自华章计算机《TypeScript图形渲染实战:2D架构设计与实现》 一书中第3章,第3.3.5节,作者是步磊峰。

3.3.5  CSS盒模型对_viewportToCanvasCoordinate的影响

  在Application类中,坐标转换是在_viewportToCanvasCoordinate私有方法中完成的。在上一节鼠标单击测试中对canvas的margin设置为0px,并且没有设置border和padding属性。这些属性都属于CSS盒模型属性,那么如果设置这些属性,会不会对原本实现的_viewportToCanvasCoordinate函数有影响呢?

  首先,设置canvas的margin为10px,并使后面章节实现的精灵系统Demo截图来看一下效果,效果如图3.13所示。

 image.png

图3.13  设置margin后的测试效果

  设置canvas的margin为10px,其boundingClientRect相对viewport的偏移坐标是[18 , 41]。其层次关系如图3.13所示。由三个节点组成,其中grid是整个背景节点,而rect节点是grid节点的子节点,circle节点是rect的子节点,也就是grid节点的孙节点。

  当分别单击grid、rect和circle时,碰撞检测结果是正确的。这说明margin的设置并不影响_viewportToCanvasCoordinate方法。

  接下来,看看border是否会影响_viewportToCanvasCoordinate方法。其CSS代码如下:

  

#canvas {

    margin : 10px ;  /*将canvas的margin设置为10px*/

    border : 80px solid ;

 }

  

  根据上面的代码所示,将border设置为80px,默认情况下,border的颜色为黑色,来看一下运行后的效果,如图3.14所示。

  如图3.14所示,当分别单击grid、rect和circle时,鼠标选中的都是Grid,碰撞检测结果是不正确的。由此可以得出结论,即border的设置影响_viewportToCanvasCoordinate方法。

  这里还要注意一点:设置border为某个数值后,必须要标记为solid,否则border设置不会起作用。

  以同样的方式设置了padding后,同border一样,会严重影响到_viewportToCanvas Coordinate方法。

 image.png

图3.14  设置border后的测试效果


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。