jQuery 图片懒加载的方法 以及用$('.lazyImg').each()出错的地方,记录一下~

我高小莫,今天在这里发誓,如果以后能不用jQuery 的我绝不再用,做习惯了前后端分离的项目,再次回到jQuery ,发现异常的恶心~~~~· 不怪谁,怪就怪当初我,选择项目架构的时候为了省力,竟然选择了,之前项目的老框架的jQuery。

有兴趣的关注一下,中国移动智慧政企,微信公众号,里面是我做的东西。

下面步入正题:

懒加载。

原因:最搜索结果页面的时候,jQuery+waterfall ,(瀑布流插件),在电脑上开发的时候还挺快,部署到测试环境,放到手机上,我的天,玛德等了十几分钟,一直加载中。。。 我自己用fiddler用具抓包测了一下,加载一个7.24M的图片用了,287349ms,开始骂街,这TM谁传的图片啊 这么大,别的也就一百两百k,这神马 啊,加载完两个这个图片,黄花菜都凉了。

既然你费时间,加载不出来,那就不管你,其他消息加载出来,你先用占位图顶着,神马时候出来神马时候算。

做法很简单:

第一步: 把img 默认的src="占位图",设置成占位图,再给一个data-src="存放接口返回的路径"

第二步:在你需要它显示的时候:给img 一个class lazyImg,调用一个方法lazyImg(),把data-src的值,赋值给src就OK了。

var lazyImg = function () {

  $('.lazyImg').each(function() {

      $(this).attr('src', $(this).attr('data-url'));

  })

}

简单吧。

然后再说一下这个each(),以前从没好好研究过这个each()方法,行吧,我反思,以后碰见一个,我把你研究的透透的。

each()用法: 为每个匹配元素规定运行的函数。

$(selector).each(function(index,element))
  • index - 选择器的 index 位置
  • element - 当前的元素(也可使用 "this" 选择器)

刚开始 我用的element,来调用attr()这个方法,却报错,没有这个function,我以为获取的有问题,反复看了还是没问题,后来才知道,得用$(this)这个里面才有attr() 这个方法,获取element是没有的,都是object,但打印出来是不同的,一个像是DOM元素,一个是变成了jQuery对象,方便调用jQuery的方法,所以仅仅是element是.attr()是会报错的。若是element要获取怎么办,用JS 原生的 getAttribute 获取属性,setAttribute 来设置属性。哎呀,jQuery,用的不熟练哦~~

猜你喜欢

转载自blog.csdn.net/qq_33505829/article/details/87945933