Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;此网站似乎使用了滚动链接的定位效果。这可能不适用于异步平移”;_Javascript_Jquery_Firefox - Fatal编程技术网

Javascript &引用;此网站似乎使用了滚动链接的定位效果。这可能不适用于异步平移”;

Javascript &引用;此网站似乎使用了滚动链接的定位效果。这可能不适用于异步平移”;,javascript,jquery,firefox,Javascript,Jquery,Firefox,Firefox给了我这个不寻常的警告。它所指的定位效果是一个divI旋转作为滚动高度的一个因子。我从来没有遇到过任何问题,但这是我应该关心的事情吗?在没有这个警告的情况下,是否会有这样的影响? 演示此问题的JavaScript是: $('.gear').css({ 'transition': 'transform 1s ease-out', '-webkit-transform': 'rotate(' + Math.round(wScroll / 2) + 'deg)', '-

Firefox给了我这个不寻常的警告。它所指的定位效果是一个
div
I旋转作为滚动高度的一个因子。我从来没有遇到过任何问题,但这是我应该关心的事情吗?在没有这个警告的情况下,是否会有这样的影响? 演示此问题的JavaScript是:

$('.gear').css({
   'transition': 'transform 1s ease-out',
   '-webkit-transform': 'rotate(' + Math.round(wScroll / 2) + 'deg)',
   '-moz-transform': 'rotate(' + Math.round(wScroll / 2) + 'deg)',
   '-ms-transform': 'rotate(' + Math.round(wScroll / 2) + 'deg)',
   'transform': 'rotate(' + Math.round(wScroll / 2) + 'deg)',
});
  • wScroll
    是当前滚动高度

    • 我认为,警告接着说:

      …有关更多详细信息,请参阅,并加入有关工具和功能的讨论

      但如果这一页不清楚,这里是它的要点

      “异步平移”的思想是:当页面滚动时,浏览器调用
      scroll
      处理程序,但它也在新的滚动点异步绘制页面。这样做是为了使滚动显示响应(@60 FPS),即使在主线程忙碌超过16毫秒时也是如此

      这意味着处理程序实现的效果不能保证与当前滚动位置同步。也就是说,滚动是平滑的,但是你的div旋转时的FPS较小——看起来很僵硬,不平滑更新,错过了示例中的
      转换
      效果——旋转本身也将是平滑的,但它可能比页面开始滚动的时间晚

      我认为,如果没有这个问题,就无法实现当前可用技术的确切效果

      例子 (请注意,要查看正在运行的,您需要在启用Firefox的情况下运行Firefox版本。特别是,这要求Firefox以多进程(“e10s”)模式运行,而此时该模式仍不在发布版本中。)

      window.onscroll=function(){
      var wScroll=document.documentElement.scrollTop;
      document.getElementById(“gear css”).style.transform='rotate('+Math.round(wScroll/2)+'deg');
      document.getElementById(“gear js”).style.transform='rotate('+Math.round(wScroll/2)+'deg);
      document.getElementById(“gear js”).textContent=leftPad(wScroll+“”,'0',4);
      设置超时(减速(500),0);
      };
      函数leftPad(s,ch,maxLen){返回ch.repeat(maxLen-s.length)+s;}
      功能减速(timeMs){
      返回函数(){
      var start=Date.now();
      var j=“”;
      对于(var i=0;(Date.now()-start
      #齿轮css,#齿轮js{
      边框:纯黑1px;
      }
      #齿轮css{
      过渡:变换1s放松
      }
      
      哦
      哦
      
      我知道这个问题是不久前提出的,但是性能问题仍然存在。 下面是一个不依赖滚动事件侦听器的替代解决方案。这可以最大限度地减少web浏览器中常见的单独滚动线程所造成的jank和lag,定期更新css,而不是在滚动窗口时更新css。这意味着开发人员控制台警告将不会显示。我个人不会太担心这个警告,也不会在一些小事情上使用滚动事件,比如转动齿轮或更改css类,但是,如果用户体验直接依赖于效果,它将破坏页面的可用性

      var gear;
      var lastPosition;
      var refreshRate = 60; // fps; reduce for less overhead
      var animation = "rotate(*deg)"; // css style to apply [Wildcard is *]
      var link = 0.5; //what to multiply the scrollTop by
      
      function replace(){
          if(lastPosition != document.body.scrollTop){ // Prevents unnecessary recursion
              lastPosition = document.body.scrollTop; // updates the last position to current
              gear.style.transform = animation.replace("*", Math.round(lastPosition * link)); // applies new style to the gear
          }
      }
      
      function setup(){
          lastPosition = document.body.scrollTop;
          gear = document.querySelector(".gear");
          setInterval(replace, 1000 / refreshRate); // 1000 / 60 = 16.666... Invokes function "replace" to update for each frame
      }
      window.addEventListener("DOMContentLoaded", setup);
      
      可以使用一个工作示例。 我已经在Firefox、Chrome和Edge(works)上进行了测试

      避免警告的其他方法是使用或使用链接到window.onscroll事件的element.classList.add()和element.classList.remove()方法

      注意:在使用css转换时,如果转换的长度大于脚本更新css样式的时间间隔(例如使用基于事件的滚动更改),请小心。基于Webkit的浏览器和EdgeHTML将以意外的方式对此进行操作,通常保持在初始位置,直到脚本停止更新元素。除非这是你想要的效果,否则它在firefox中的工作方式就不一样了


      Servo Webrender集成到Firefox中后,将在一定程度上解决这些问题(或至少相当大程度地提高性能)。尽管还有其他浏览器需要保持兼容性。

      最好的解决方案是一个开关和一个定时器 我在这里公开了解决使用“滚动”时相同错误的答案, 我建议你根据你的需要修改我的剧本!

      谢谢你,Nickolay,正如你所说,页面不太清晰,但你确实帮了忙@MichaelHancock:请注意,MDN是一个wiki,因此,如果您对如何使页面对不构建浏览器的用户更清晰有任何建议,我们将非常欢迎。我记得他们与垃圾邮件发送者有问题,所以创建一个新帐户可能比必须的要困难,但无论如何,如果你有兴趣帮助,请!