首页 > 代码库 > 【性能优化】懒、懒加载、懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调
【性能优化】懒、懒加载、懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调
/* * * 扩展jq原型: 懒、懒加载、懒动画 * --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调 * * $jq.viewChange( {top:100,bottom:100,change:function(status){}} ) --- status: ‘in‘/‘out‘ * $jq.viewChange(‘off‘) * * $jq[n].viewChange.status = ‘in‘/‘out‘ ----- 状态为‘in‘表示该DOM在规定的可视区 * */(function() { var $win = $(window); var winH = $win.height(); var _isRun = true; $win.resize(function() { winH = $win.height(); if (_isRun) { _isRun = false; setTimeout(function() { $win.trigger(‘scroll.viewChange‘); _isRun = true; }, 100); } }); var setStatus = function(params) { if (this.parentElement) { //判断DOM是否还在页面中 var $self = $(this); var offsetTop = $self.offset().top, selfH = $self.height(), scrollTop = $win.scrollTop(); if (scrollTop + winH + params.bottom > offsetTop && scrollTop - params.top < offsetTop + selfH) { if (this.viewChange.status !== ‘in‘) { this.viewChange.status = ‘in‘; params.change.call(this, this.viewChange.status); } } else { if (this.viewChange.status !== ‘out‘) { this.viewChange.status = ‘out‘; params.change.call(this, this.viewChange.status); } } } else { $win.off(‘scroll.‘ + this.viewChange.eventNamespace); } }; $.fn.viewChange = function(options) { if (options === ‘off‘) { this.each(function() { if (this.viewChange) { $win.off(‘scroll.‘ + this.viewChange.eventNamespace); delete this.viewChange; } }); } else { var params = { top: 0, //增加或缩小顶部范围 bottom: 0, //增加或缩小底部范围 change: $.noop //视图状态发生改变时的回调:function(status){} }; params = $.extend(params, options); params.top = parseInt(params.top); params.bottom = parseInt(params.bottom); this.each(function() { if (this.viewChange) { $win.off(‘scroll.‘ + this.viewChange.eventNamespace); } this.viewChange = { eventNamespace: ‘viewChange.‘ + Math.random().toString().replace(‘0.‘, ‘‘), }; $win.on(‘scroll.‘ + this.viewChange.eventNamespace, function() { setStatus.call(this, params); }.bind(this)); setStatus.call(this, params); }); } return this; };})();//使用情况$jq.viewChange({ top: -100, //缩小顶部范围 bottom: 100, //增加底部范围 change: function(status) { if (status === ‘in‘) { //当滚动到规定的可视区时 } else if (status === ‘out‘) { //当滚动出规定的可视区时 } }});
【性能优化】懒、懒加载、懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。