最近在使用 jQuery Lazyload 插件時,發現了一個 bug,經過一番排查和嘗試,終于找到了解決辦法。
首先,這個 bug 的表現是這樣的:圖片并沒有按照期望的懶加載方式加載出來,而是直接全部加載出來。在控制臺也沒有任何報錯信息。
經過認真檢查,發現是在判斷元素是否在視口內部時存在問題。原來的代碼是這樣的:
var winHeight = $(window).height(); var scrollTop = $(window).scrollTop(); var elTop = $(el).offset().top; if((elTop - scrollTop)< winHeight) { // do something }
這里存在一個問題,就是如果元素距離視口的距離很大,超過了瀏覽器窗口的高度,那么這個判斷就會失效。因此,我們可以加上一個判斷條件,判斷元素距離窗口底部的距離是否小于窗口高度。
var winHeight = $(window).height(); var scrollTop = $(window).scrollTop(); var elTop = $(el).offset().top; var elBottom = $(el).offset().top + $(el).height(); if((elTop - scrollTop)< winHeight && (elBottom - scrollTop) >0) { // do something }
這樣就解決了這個 bug,圖片可以按照期望的懶加載方式加載出來了。
總之,在開發過程中遇到問題,不要著急,認真分析和排查,相信總會找到解決辦法。