• css3の极限


    直接看效果  

    可连续点击屏幕(安卓只保留照片和星星)

    demo戳

    在讲解原理前 要先接受我的吐槽 明白个事儿!

    如果你无视标题进来的 会觉得是啥做的呢?因为demo手机可以打开的 所以说是h5

    不是我们这行业的人说是h5也就算了  可是为什么就算是这个圈子中 还有很多人敲定是h5呢?

    别啥都丢给h5这个词好吧 只要是移动端打开的页面都是h5了? 

    完成这个demo需要的是css3 3d相关和一些js计算而已 css从2.0升到3.0就属于html5了吗?

    如果用html5的语意化元素来表示一个女生的话是不够的 因为女生可能还需要化妆 她需要可爱漂亮!这就需要css3的登场了 它能在结构上赋予更加惊艳の美! 

    吐槽完毕

    做这种东西之前最好先把3d空间图解出来 如下图

    那些字母分别表示 l=logo c=云 s=星星

    那条淡蓝色的曲线是视角路径 还有3个球面 球面上分布了照片

    有些取值是有技巧的 比如星星的z坐标就不能乱取 不能和球面重叠了 星星们的z坐标需要大于那个最大球面赤道半径!

    图片分布

    w相当于图片宽的话 上图可以表示为已经无缝的分布在了球面赤道上 计算出L的值就可以了

    如果纬线的元素个数是赤道的一半 而且图片的宽和高相同的话 上面的计算结果也可以用到纬线上的

    如宽高都不相同 那么需要计算出两个L 然后再计算出一个最适合的值 

    每条经线的元素个数也需要计算 可以通过每条经线半径与赤道半径的比来给出 生成球面的关键代码

        let tz = sqrt( pow(w*.5/tan(PI/(the*2)),2)+pow(h*.5/tan(PI/(the*2)),2))*sz;
    
        for(let i = 0;i<=the;++i){
          const the_rd = PI*.5-i/the*PI;
          const n = sin(i/the*PI)*ln;
          const fai = abs(n-0)<.00001?1:n*the*2|0;
    
          for(let j = 0;j<fai;++j){
            const fai_rd = j/fai*PI*2;
    
            ars.push({fai_rd,the_rd,tz,num:_.length,w,h});
    
          }
    
        }

    视角的轨迹其实和 react弹幕视频播放 其中的某些弹幕轨迹一样 只不过是运用到了3d中 其中代码

    _.x = sin(sn.rd = sn.brd+sn.drd*(n- sin(n*2*PI)/(2*PI)))*sn.dx;

    还有各种运动 我博文第一篇就讲过了 非线性运动与线性运动

    其实这还没有到css3的极限

    可以加上光照和把照片换成3d的cd盒子 但是css3没有提供光照相关 我们需要很多的额外计算 cd盒子还需要拼平面

    充分运用css3 并不需要麻烦的计算机图形学也可以做出很多3d效果 !

    强调 请不要 h5 h5 h5了啊!

  • 相关阅读:
    在eclipse中进行HotSpot的源码调试
    CentOS6.5上编译OpenJDK7源码
    商城楼层跳转
    javascript原生百叶窗
    javascript原生轮播
    Canvas计时器
    纯js模拟 radio和checkbox控件
    纯js日历
    关于匿名函数,闭包和作用域链
    端口占用问题
  • 原文地址:https://www.cnblogs.com/daidaidai/p/5634448.html
Copyright © 2020-2023  润新知