zoukankan      html  css  js  c++  java
  • will-change

    目的:

     让GPU分担CPU的工作,从而优化和分配内存,告知浏览器做好动画的准备。

    背景:

    注意事项:

    1,will-change虽然可以加速,但是,一定一定要适度使用;

    2,使用伪元素,独立渲染:

      不要这样直接写在默认状态中,因为will-change会一直挂着: 

    .a {
      will-change: transform;
      transition: transform 0.3s;
    }
    .a:hover {
      transform: scale(1.5);
    }

      解决方案:

      可以让父元素hover的时候,声明will-change,这样,移出的时候就会自动remove,触发的范围基本上是有效元素范围。

    .a-parent:hover .a {
      will-change: transform;
    }
    .a {
      transition: transform 0.3s;
    }
    .a:hover {
      transform: scale(1.5);
    }

    3,如果使用JS添加will-change, 事件或动画完毕,一定要及时remove. 比方说点击某个按钮,其他某个元素进行动画。点击按钮(click),要先按下(mousedown)再抬起才出发。因此,可以mousedown时候打声招呼, 动画结束自带回调,于是:

    dom.onmousedown = function() {
        target.style.willChange = 'transform';
    };
    dom.onclick = function() {
        // target动画哔哩哔哩...
    };
    target.onanimationend = function() {
        // 动画结束回调,移除will-change
        this.style.willChange = 'auto';
    };

     官方:https://developer.mozilla.org/en/docs/Web/CSS/will-change ,给出的示例:

    var el = document.getElementById('element');
    
    // Set will-change when the element is hovered
    el.addEventListener('mouseenter', hintBrowser);
    el.addEventListener('animationEnd', removeHint);
    
    function hintBrowser() {
      // The optimizable properties that are going to change
      // in the animation's keyframes block
      this.style.willChange = 'transform, opacity';
    }
    
    function removeHint() {
      this.style.willChange = 'auto';
    }
  • 相关阅读:
    自调用匿名函数和js的Module模式
    设置一天中不同时段的倒计时,计算时针和分针的夹角
    移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟
    使用Fiddler改变线上js文件的引用路径
    Linux下常用设置文件和文件夹读写权限操作
    RESTful API
    mysql之load语句
    Django学习之点赞功能
    Django学习之网站图标
    python学习之pyenv
  • 原文地址:https://www.cnblogs.com/wang715100018066/p/7064918.html
Copyright © 2011-2022 走看看