簡體   English   中英

javascript在滾動上加載圖像

[英]javascript load image on scroll

我只想使用javascript構建自己的惰性圖像

到目前為止,這是我的代碼:

<img src="images1.jpg" data-src="images2.jpg" />

var body = document.body,
    html = document.documentElement;

var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight),
    screen = screen.height; 
    img = document.getElementsByTagName("img");

    window.addEventListener("scroll", function() {

    for(var i = 0; i < img.length; i++) {

        if (img[i].clientHeight >= height - screen) {

        var data = img[i].getAttribute("data-src");
        img[i].setAttribute('src','');
        img[i].setAttribute("src", data);
        }
    }
    });

問題是,滾動事件時圖像data-src沒有執行到src屬性中。

我希望它在視口之前200像素的圖像時執行。

該怎么做? 我的代碼怎么了? 我的if條件是否可能不正確?

您的代碼可以正常工作,您需要添加}); 最后。

 var body = document.body, html = document.documentElement, height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight), screen = screen.height; img = document.getElementsByTagName("img"); window.addEventListener("scroll", function() { for(var i = 0; i < img.length; i++) { if (img[i].clientHeight >= height - screen) { var data = img[i].getAttribute("data-src"); img[i].setAttribute('src', data); } } }); 
 <img src="https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-1&w=350&h=250" data-src="https://placeholdit.imgix.net/~text?txtsize=63&bg=63FF47&txtclr=ffffff&txt=Image-1&w=350&h=250" /> <img src="https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-2&w=350&h=250" data-src="https://placeholdit.imgix.net/~text?txtsize=63&bg=63FF47&txtclr=ffffff&txt=Image-2&w=350&h=250" /> <img src="https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-3&w=350&h=250" data-src="https://placeholdit.imgix.net/~text?txtsize=63&bg=63FF47&txtclr=ffffff&txt=Image-3&w=350&h=250" /> <img src="https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-4&w=350&h=250" data-src="https://placeholdit.imgix.net/~text?txtsize=63&bg=63FF47&txtclr=ffffff&txt=Image-4&w=350&h=250" /> 

我看不到“視口之前200像素”的含義。 您能更好地解釋一下嗎? 如果您不希望同時更改所有圖像,則應考慮每個圖像的offetTopscrollTop位置。 http://jsbin.com/xexeho/edit?html,js,輸出

如果您可以提及圖像的尺寸,那將更有意義。 但是,我仍然試圖嘗試回答您的問題,因為我認為代碼中的滾動事件根本沒有觸發。 嘗試將img標簽設置在視口下方,以便滾動

對於計算也使用window.innerHeight,因為它給出了視口的正確高度減去地址欄的高度等。

<img src="images1.jpg" data-src="images2.jpg" style="position:absolute;top:1169px"/>
<script>
    var body = document.body,
        html = document.documentElement;

    var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight),
        screen = window.height;
        img = document.getElementsByTagName("img");

    window.addEventListener("scroll", function() {
        console.log("Checking if the scroll event is triggered...");
        for(var i = 0; i < img.length; i++) {

            if (img[i].clientHeight >= height - screen) {
                var data = img[i].getAttribute("data-src");
                img[i].setAttribute('src','');
                img[i].setAttribute("src", data);
            }
        }
    });
</script>

要么

嘗試使用鼠標滾輪和/或DOMMouseScroll之類的事件,它們不希望主體實際可滾動。

希望這可以幫助!

托德座右銘的延遲加載插件的簽出 查看其他實現非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM