在iOS Safari上滚动后,锚点会失去点击功能

时间:2012-02-21 13:34:43

标签: jquery ios mobile-safari

使用此功能获取点击次数:

$("nav li a").click(function(event) {
    event.preventDefault();
    target = $(this).attr("href").replace('#', '');
    goToByScroll(target);
});

这是滚动功能:

function goToByScroll(id) {
    $('html, body').animate({
        scrollTop: $("#"+id).offset().top - totalHeight 
    }, 'slow');
}

第一次点击有效,但之后链接不可点击/活动,除非手动滚动页面。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

根据iOS人员的进一步调查,我们发现它是iOS5上的Safari中的一个错误。

我试过了;

// $('html,body').animate({ scrollTop: scrollto + 'px' }, 'slow')
window.scroll(0,0);

并且看到它实际上在屏幕下方引出了固定标题。点击工作。

所以我把代码换回来了,虽然它在顶部正确地绘制了标题,但是活动点击区域仍然在页面的下方,虽然是不可见的,但是可以点击。

似乎他们已经解决了在iOS6上测试的问题。

我耗尽了所有类型的CSS和DOM操作,删除并重新插入新的标题区域......没有任何作用。

所以我99%肯定发布这个答案。大声笑。虽然我意识到这对你没有帮助。

答案 1 :(得分:0)

这里有许多因素可以发挥作用,大部分都不涉及您链接的代码。点击不起作用:

  1. 正在清除点击事件
  2. 您尝试单击的元素由另一个(可能是透明的)元素
  3. 覆盖
  4. 元素的可点击区域已移位或格式错误
  5. 对于第一个出现问题的可能性,您的元素必须保持不可点击状态,直到刷新或重新创建单击处理程序。检查单击处理程序是否未构建多次。您可以通过在致电$(element).click(function() { ... })时设置断点或警报/控制台声明来执行此操作。

    对于问题的第二种可能性,需要在可点击元素之上存在另一个元素。这可以通过使用浏览器或浏览器扩展来检查,该扩展允许您右键单击要检查的元素。如果被检查的元素不是您的可点击元素,则可能是这个问题。

    对于问题的第三种可能性,您必须检查可点击元素在不可点击时的位置,大小和形状。使用浏览器或浏览器扩展选择并突出显示页面上的元素。看看它的显示位置,它有什么尺寸,它是z-index评估的内容,它有什么显示属性(display: inline因引发可点击性问题而臭名昭着),如果它甚至“实际上” “在当前的视口中。

    简而言之,您发布的代码几乎没有说明可能发生的事情,因此您需要进行更多调试或提供更多代码。