3-9插件哪错误了?
;(function ($){
//首先创建构造方法声明对象,执行初始化
function LazyLoad(el ,opts){
this.init(el ,opts);
}
//默认的参数写在构造函数上
LazyLoad.DEFAULTS = {
dataAttr:'src';//默认的参数
}
//写个方法,所有的方法都是写在原型链上的
LazyLoad.prototype.init = function () {//初始化
this.$el = $(el);//把DOM对象转换成jquery对象
this.opts= $.extend({},LazyLoad.DEFAULTS,opts);//参数,传递自定义参数就使用自定义参数,
//如果没有传就使用默认的参数
this.$win=$(window);
this.bindEvent(); //首先执行绑定事件的方法
this.load(); //加载图片
};
LazyLoad.prototype.bindEvent = function () {
var self = this,
timer= null;
this.$win.on('scroll resize',function (){
if (timer) return;
timer = setTimeout(function () {
self.load();
timer= null;//执行完一次之后把timer在变成空,
//等下一次触发scroll事件有值之后在执行load()事件循环往复
},280);
});
};
LazyLoad.prototype.load = function (){
var self = this;
this.$el.each(function () {
if(inVisibleArea(this)){
appear();
}
});
//位置检测
function inVisibleArea(elem){
var $win = self.$win;
return $win.scrollTop() + $win.height() >= $(elem).offset().top;
}
//显示图片
function appear(elem){
elem.src = $(elem).data(self.opts.dataAttr);
}
};
// $.each-> $.extend //第一种调用方式 ,
// $().each->$.fn.extend//第二种调用方式 ,以后我们用第二种方式调用
//这里的每一个方法都是插件,方法名就是插件的名称
$.fn.extend({//调取端口
lazyload:function(){
new LazyLoad(this, opts);//实例化,this是他本身,第二个是自定义参数
return this;//因为要连缀所以直接返回this;
}
});
})(jQuery);
正在回答 回答被采纳积分+1
- 参与学习 315 人
- 提交作业 136 份
- 解答问题 626 个
如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星