jQuery scrollTo 插件在 iOS 上变成 Jerky

Posted

技术标签:

【中文标题】jQuery scrollTo 插件在 iOS 上变成 Jerky【英文标题】:JQuery scrollTo plugin becomes Jerky on iOS 【发布时间】:2012-06-27 22:41:37 【问题描述】:

我在 one-page site 上使用 JQuery scrollTo plugin 在不同部分之间垂直滚动。

滚动在所有浏览器中都能正常工作除了 ios Safari 可以滚动但非常生涩。我在页面上使用了许多其他 Jquery 插件,因此它可能与其中之一发生冲突。

如果有人知道在 iPad 上流畅运行的 scrollTo 替代方案,或者可以建议从哪里开始解决问题,我将不胜感激。我试过this solution,但没有成功。

【问题讨论】:

你不需要插件。 jQuery 从 1.2.6 开始就有 .scrollTop api.jquery.com/scrollTop 你甚至可以使用 animate 方法进行动画处理。喜欢 .animate(scrollTop:0, 2000, 'ease') 相关:***.com/questions/8970740/… scrollTo 插件仍然有许多 vanilla core scrollTop 没有的高级功能。 【参考方案1】:

试试这个

$.scrollTo(SELECTOR, 800, 
    'axis':'y'
);

【讨论】:

你救了我,伙计!谢谢!一个 2 年前的帖子,你一个月前发布的,我刚刚使用了这个修复......巧合?哈哈【参考方案2】:

感谢阿纳的提示。

您的建议让我走上了正确的道路,在 this JSFiddle 的帮助下,我现在拥有了 smooth scroll i wanted to achieve,每个部分都具有平滑的动画滚动效果,并且活动菜单项会自动突出显示。

// Cache selectors
var lastId,
    topMenu = $("#top-menu"),
    topMenuHeight = topMenu.outerHeight()+15,
    // All list items
    menuItems = topMenu.find("a"),
    // Anchors corresponding to menu items
    scrollItems = menuItems.map(function()
      var item = $($(this).attr("href"));
      if (item.length)  return item; 
    );

// Bind click handler to menu items
// so we can get a fancy scroll animation
menuItems.click(function(e)
  var href = $(this).attr("href"),
      offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
  $('html, body').stop().animate( 
      scrollTop: offsetTop
  , 300);
  e.preventDefault();
);

// Bind to scroll
$(window).scroll(function()
   // Get container scroll position
   var fromTop = $(this).scrollTop()+topMenuHeight;

   // Get id of current scroll item
   var cur = scrollItems.map(function()
     if ($(this).offset().top < fromTop)
       return this;
   );
   // Get the id of the current element
   cur = cur[cur.length-1];
   var id = cur && cur.length ? cur[0].id : "";

   if (lastId !== id) 
       lastId = id;
       // Set/remove active class
       menuItems
         .parent().removeClass("active")
         .end().filter("[href=#"+id+"]").parent().addClass("active");
                      
);

【讨论】:

以上是关于jQuery scrollTo 插件在 iOS 上变成 Jerky的主要内容,如果未能解决你的问题,请参考以下文章

scrollTo JS 插件在 iPad 上不起作用 - 闪烁

如何使用 JQuery $.scrollTo() 函数滚动窗口

scrollTo() 和 jquery scrollTop() 在 Chrome 中不起作用

jQuery scrollTo 无法正常工作,html 设置为 100%

javascript Uikit 3 Accordion + ScrollTo #uikit #jquery

javascript 使用纯javascript和没有jquery的ScrollTo动画