【问题标题】:chrome/opera anchor shift away after adding dom elements添加 dom 元素后,chrome/opera 锚移开
【发布时间】:2013-03-20 18:03:25
【问题描述】:

假设我有一个网址:http://rythmengine.org/doc/expression.md#transformer

页面加载后,锚点立即正确显示,但是我有一个脚本可以自动在页面上添加一些 iframe,chrome/opera 稍后将远离锚点#comment、firefox 和 IE(10 ) 都很好。

知道如何在 Chrome/opera 中修复它吗?

【问题讨论】:

  • 祝您从可靠来源找到答案。这是一个非常具体的问题。我认为您无法从官方网站上找到答案。

标签: html google-chrome dom anchor opera


【解决方案1】:

我不知道我是否会实现这一点,因为 iframe 确实需要相当长的时间来加载,并且用户可能已经在页面上滚动并被颠簸回哈希元素,但这是我的一个解决方案想出了使用 jQuery。

由于 iframe 在最初加载后会在文档中被替换,因此您可以使用 .load() 函数,如果您只是将它放在文档上,该函数通常不会触发。

this pageedit the fiddle here 上进行演示

只需将此 jQuery 代码添加到您的脚本标签中即可替换所有 pre code

代码:

$('iframe').load(function() {
    moveToHash();
});

// Scroll to the url hash element
function moveToHash()
{
    var hashElem = $(window.location.hash);

    // If the hash elment exists
    if(hashElem.length)
    {
        window.scrollTo(hashElem.position().left, hashElem.position().top);
    } 
}

编辑: 代码中有一些错误和不必要的错误,现已修复。

【讨论】:

  • thx 在我将 window.scrollTo 逻辑放入 setTimeout 回调函数后它就可以工作了
【解决方案2】:

当每个 iframe 结束加载时,告诉浏览器转到该哈希

$('iframe').load(function() {
    document.location.href = document.location.hash;
});

【讨论】:

  • 其实这个解决方案很简洁,我在实际项目中使用它
  • 对于好奇的人,这里是最终的解决方案:github.com/greenlaw110/rythm-website/blob/master/app/rythm/Doc/…
  • 我想知道使用 $('iframe:last-child') 是否会更有效
  • 不确定 iframe 加载事件是否由订单触发。无论如何ifCnt = ifCnt - 1;if(ifCnt == 0) 不会花太多钱,对吧?
猜你喜欢
  • 2013-07-15
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多