【问题标题】:CSS Shimmer effect with blocking JavaScript带有阻塞 JavaScript 的 CSS Shimmer 效果
【发布时间】:2019-10-13 18:52:13
【问题描述】:

我有一个带有以下 CSS 的微光 React 组件

background: #ebebeb;
background-image: linear-gradient(to right,  #ebebeb 0%, #c5c5c5 20%,  #ebebeb 40%,  #ebebeb 100%);

我应用的动画关键帧如下:

{
    0%: { background-position: -468px 0 };
    100%: { background-position: 468px 0 };
}

我的主页在装载时很重。所以动画冻结了大约一秒钟左右。 我读到动画过渡是在线程外完成的 https://www.phpied.com/css-animations-off-the-ui-thread/

谁能帮助我以类似的脱线方式制作微光效果?

【问题讨论】:

    标签: javascript css css-animations linear-gradients


    【解决方案1】:

    按照链接中的建议使用转换。这是一个带有伪元素的想法:

    .box {
      background-image: linear-gradient(to right, #ebebeb calc(50% - 100px), #c5c5c5 50%, #ebebeb calc(50% + 100px));
      background-size:0;
      height: 200px;
      position:relative;
      overflow:hidden;
    }
    .box::before {
      content:"";
      position:absolute;
      top:0;
      right:0;
      width:calc(200% + 200px);
      bottom:0;
      background-image:inherit;
      animation:move 2s linear infinite; 
    }
    @keyframes move{
      to {
        transform:translateX(calc(50% + 100px));
      }
    }
    <div class="box">
    
    </div>

    【讨论】:

    • 感谢您的回复。我刚试过这个,JS仍然会阻止动画。 jsfiddle.net/d3qb6z4a
    • @mohsinulhaq 您正在不支持此功能的浏览器上进行测试。在链接中,您将阅读 在大多数不支持的浏览器中,kill 开关会杀死所有动画。照常营业。
    • 我在同一个浏览器中都试过了。当我打开文章 (phpied.com/files/css-thread/thread.html) 中的示例链接时,单击“kill 'em all for 2 sec”只会停止中间框,它没有使用变换动画。这意味着我的浏览器(Chrome 77、macOS)支持它。只是jsfiddle不起作用。
    • @mohsinulhaq 奇怪.. 他们应该表现得一样
    • @mohsinulhaq 这是百分比值的使用..如果您只考虑翻译中的像素值,它将起作用
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2021-12-27
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多