2017-09-30 54 views
1

我有一个网页的iframe。目前我用这个代码加载IFRAME onscroll ....滚动后再次停止加载iframe?

的Javascript:

function lazyLoad() { 
    for (var e = document.getElementsByClassName("lazy"), t = 0; t < e.length; t++) isInViewport(e[t]) && (e[t].src = e[t].getAttribute("data-src")) 
     } 
function isInViewport(e) { 
    var t = e.getBoundingClientRect(); 
    return t.bottom >= 0 && t.right >= 0 && t.top <= (window.innerHeight || document.documentElement.clientHeight) && t.left <= (window.innerWidth || document.documentElement.clientWidth) 
} 
function registerListener(e, t) { 
    window.addEventListener ? window.addEventListener(e, t) : window.attachEvent("on" + e, t) 
} 
registerListener("load", lazyLoad), registerListener("scroll", lazyLoad); 

HTML:

<iframe data-src='http://some-link.com' src='' class='lazy'/> 

但是,当我即使只是轻微滚动一次,也会再次滚动iframe。任何人都可以帮我创建iframe不会再次加载后,我第二次滚动?谢谢!

DEMO:http://design-jarwo.blogspot.co.id/,我会用我的博客www.kodejarwo.com

+0

你想lazyLoad被调用一次,在页面加载时,一次,当用户滚动时,对吧? – ncardeli

+0

是的,当用户滚动 –

回答

0

你必须解雇之后删除滚动事件侦听器:

function onScroll() { 
    if (lazyLoad()) { 
     window.removeEventListener('scroll', onScroll); 
    } 
} 
function onLoad() { 
    lazyLoad(); 
} 
function lazyLoad() { 
    var loaded = false; 
    for (var e = document.getElementsByClassName("lazy"), t = 0; t < e.length; t++) { 
     isInViewport(e[t]) && (e[t].src = e[t].getAttribute("data-src")); 
     loaded = true; 
    } 
    return loaded; 
} 
function isInViewport(e) { 
    var t = e.getBoundingClientRect(); 
    return t.bottom >= 0 && t.right >= 0 && t.top <= (window.innerHeight || document.documentElement.clientHeight) && t.left <= (window.innerWidth || document.documentElement.clientWidth) 
} 
function registerListener(e, t) { 
    window.addEventListener ? window.addEventListener(e, t) : window.attachEvent("on" + e, t) 
} 
registerListener("load", onLoad), registerListener("scroll", onScroll); 
+0

时不会再次被调用,但当我滚动(第一次)时,iframe不会被加载,我必须滚动到我的页面底部,然后刷新页面以创建iframe加载 –

+0

@BangJarwo ok,所以你想在加载iframe之后移除滚动监听器,对吗? – ncardeli

+0

是的,在加载iframe之后 –