美文网首页
transform 在ios下的bug

transform 在ios下的bug

作者: 招展君 | 来源:发表于2017-08-23 21:34 被阅读245次

    在上一篇帖子里实现了一个立方体的效果,点这里可以看到。
    源码在这里可以看到
    可是在最后发现ios下的效果不符合预期。这篇就是解决这个问题的记录帖。


    问题原因:

    ios下 transform的变化原点会有兼容问题。具体表现为两个方面。

    1. ios上会把dom进行放大。

    左边是有transform-origin样式,右边是把这个样式给注释掉的样子。可以发现,右边的大小其实比左边的看起来要小


    Paste_Image.png

    --

    解决办法:

    通过translate位移 不会改变变换原点 这个特性。 在变换的时候对dom进行translateZ操作,其次再进行rotateZ 即可解决这个问题。

    所以给每个面的变换都加了translateZ


    可是又发现了新问题,就是效果更不符合预期了。
    Paste_Image.png
    这时候会发现中间有个黑色的框,那个其实是这个立方体的容器。
    仔细观察效果发现貌似每个面距离中心点的距离貌似翻倍。
    回到代码里,好好想了下,如果有translateZ来移动到中心点的距离的话,那transform-origin里的那个变换z轴原点则是多余的。
    试着将transform-origin改为两个参数(center center ),在pc, ios上均符合了效果。
    1.gif
    回头看下之前的效果:
    1.gif

    有个细节给忘掉了。

    上面这个解决办法是通过translateZ将dom往前移动,由于近大远小的缘故,所以需要在父级对这个容器进行tranlateZ向后移动以弥补之前的向前移动。


    1.gif

    在补上面的这个细节的时候发现了另外两个细节

    1.要牢记住transform里的执行顺序 是先写的后执行。

    1. 在style里的transform样式要和js里修改的transform格式要完全一致,不然会出现 js 加的transfrom无效。
    css里:
    transform:translateZ(-75px) rotateY(0deg);
    css里写成:transform:translateZ(-75px);   js执行无效;
         写成:transform:rotateY(0deg) translateZ(-75px);   js执行无效;
    ---
    js里:
    this.style.WebkitTransform = this.style.transform = 'translateZ(-75px) rotateY(360deg)'
    

    相关文章

      网友评论

          本文标题:transform 在ios下的bug

          本文链接:https://www.haomeiwen.com/subject/kxijdxtx.html