今天碰到一个很奇快的需求,大致如下:html页面有很多div容器,每个div容器的数据都是通过ajax请求来处理的。一般情况处理ajax请都在windows的load事件中,由于页面的div容器太多造成windows的load事件中ajax请求太多;所以我们只需要处理那些在浏览器中看得见的div容器。假如我们现在有10个div容器,每个屏幕刚好显示1个div容器,如果我们放到windows的load事件中,那么刚开始就有10个ajax请求。其实用户可能根本不会看到后面几个div容器,所以我们通过这个插件来延迟这些ajax的请求,刚加载页面有1个或2个ajax请求,当滚动条滚到相应div的时候,div再发起ajax请求。
jquery.lazyevent.js插件源代码:
- (function ($, window) {
- var $window = $(window);
-
- $.fn.lazyevent = function (options) {
- var elements = this;
- var settings = {
- threshold: 0,
- event: "scroll",
- container: window,
- skip_invisible: true,
- fn: null,
- data: null
- };
- function update() {
- var counter = 0;
-
- elements.each(function () {
- var $this = $(this);
- if (settings.skip_invisible && !$this.is(":visible")) {
- return;
- }
-
-
-
- if (inviewport(this, settings)) {
- $this.trigger("fire");
- }
- });
-
- }
- if (options) {
- $.extend(settings, options);
- }
- var $container = (settings.container === undefined || settings.container === window) ? $window : $(settings.container);
-
- if (0 === settings.event.indexOf("scroll")) {
- $container.bind(settings.event, function (event) { return update(); });
- }
- this.each(function () {
- var self = this;
- var $self = $(self);
- self.fired = false;
- $self.one("fire", function () {
- if (!this.fired) {
- if (settings.fn) {
- settings.fn.call(self, settings.data);
- }
- self.fired = true;
- var temp = $.grep(elements, function (element) { return !element.fired; });
- elements = $(temp);
- }
- });
-
- if (0 !== settings.event.indexOf("scroll")) {
- $self.bind(settings.event, function (event) {
- if (!self.fired) {
- $self.trigger("fire");
- }
- });
- }
- });
-
- $window.bind("resize", function (event) {
- update();
- });
-
-
- var belowthefold = function (element, settings) {
- var fold;
-
- if (settings.container === undefined || settings.container === window) {
- fold = $window.height() + $window.scrollTop();
- } else {
- fold = $container.offset().top + $container.height();
- }
- return fold <= $(element).offset().top - settings.threshold;
- };
-
- var rightoffold = function (element, settings) {
- var fold;
-
- if (settings.container === undefined || settings.container === window) {
- fold = $window.width() + $window.scrollLeft();
- } else {
- fold = $container.offset().left + $container.width();
- }
-
- return fold <= $(element).offset().left - settings.threshold;
- };
- var abovethetop = function (element, settings) {
- var fold;
-
- if (settings.container === undefined || settings.container === window) {
- fold = $window.scrollTop();
- } else {
- fold = $container.offset().top;
- }
-
- return fold >= $(element).offset().top + settings.threshold + $(element).height();
- };
-
- var leftofbegin = function (element, settings) {
- var fold;
-
- if (settings.container === undefined || settings.container === window) {
- fold = $window.scrollLeft();
- } else {
- fold = $container.offset().left;
- }
-
- return fold >= $(element).offset().left + settings.threshold + $(element).width();
- };
- var inviewport = function (element, settings) {
- return !abovethetop(element, settings) && !leftofbegin(element, settings) &&
- !belowthefold(element, settings) && !rightoffold(element, settings);
-
- };
- update();
- return this;
- };
-
- })(jQuery, window);
jquery.lazyevent..min.js代码:
- (function(a,c){var b=a(c);a.fn.lazyevent=function(j){var g=this;var l={threshold:0,event:"scroll",container:c,skip_invisible:true,fn:null,data:null};function m(){var n=0;g.each(function(){var o=a(this);if(l.skip_invisible&&!o.is(":visible")){return}if(h(this,l)){o.trigger("fire")}})}if(j){a.extend(l,j)}var d=(l.container===undefined||l.container===c)?b:a(l.container);if(0===l.event.indexOf("scroll")){d.bind(l.event,function(n){return m()})}this.each(function(){var o=this;var n=a(o);o.fired=false;n.one("fire",function(){if(!this.fired){if(l.fn){l.fn.call(o,l.data)}o.fired=true;var p=a.grep(g,function(q){return !q.fired});g=a(p)}});if(0!==l.event.indexOf("scroll")){n.bind(l.event,function(p){if(!o.fired){n.trigger("fire")}})}});b.bind("resize",function(n){m()});var f=function(n,p){var o;if(p.container===undefined||p.container===c){o=b.height()+b.scrollTop()}else{o=d.offset().top+d.height()}return o<=a(n).offset().top-p.threshold};var k=function(n,p){var o;if(p.container===undefined||p.container===c){o=b.width()+b.scrollLeft()}else{o=d.offset().left+d.width()}return o<=a(n).offset().left-p.threshold};var e=function(n,p){var o;if(p.container===undefined||p.container===c){o=b.scrollTop()}else{o=d.offset().top}return o>=a(n).offset().top+p.threshold+a(n).height()};var i=function(n,p){var o;if(p.container===undefined||p.container===c){o=b.scrollLeft()}else{o=d.offset().left}return o>=a(n).offset().left+p.threshold+a(n).width()};var h=function(n,o){return !e(n,o)&&!i(n,o)&&!f(n,o)&&!k(n,o)};m();return this}})(jQuery,window);
html调用代码:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>lazyevent</title>
- <script type="text/javascript" src="Scripts/jquery-1.7.js"></script>
- <script type="text/javascript" src="Scripts/jquery.lazyevent.js"></script>
- <style type="text/css">
- /* .test
- {
- height: 500px;
- display: inline-block;
- width: 4000px;
- }
- .test div
- {
- float: left;
- }
- */.test div
- {
- width: 500px;
- height: 500px;
- }
- </style>
- </head>
- <body>
- <div style="height: 200px">
- </div>
- <div class="test">
- <div style="background-color: Green">
- Green</div>
- <div style="background-color: Lime">
- Lime</div>
- <div style="background-color: Maroon; display:none">
- Maroon</div>
- <div style="background-color: Olive">
- Olive</div>
- <div style="background-color: Red; display: none">
- Red</div>
- <div style="background-color: ButtonFace">
- ButtonFace</div>
- <div style="background-color: Aqua">
- Aqua</div>
- <div style="background-color: AppWorkspace">
- AppWorkspace</div>
- </div>
- <script type="text/javascript">
- $(function () {
- $(".test div").lazyevent({
- data: "hello word",
- fn: function (data) {
- var html = $(this).html();
- alert(data + ":" + html);
- }
- });
- });
- </script>
- </body>
- </html>
分享到:
相关推荐
**jQuery.ScrollLoading图片延迟加载插件详解** 在网页设计中,优化页面性能是至关重要的,尤其是在处理大量图片的页面时。传统的做法是将所有图片一次性加载到浏览器中,这可能会导致页面加载速度变慢,用户体验...
jQuery DataLazyLoad插件是基于JavaScript库jQuery设计的,用于延迟加载页面中的图片、iframe、div等元素。通过这种方式,页面初始加载时只会显示可见区域的内容,当用户滚动页面时,隐藏的元素才会被动态加载,从而...
1. **延迟脚本加载**:如果某些jQuery功能在页面加载后才需要,可以使用`$(window).load()`代替`$(document).ready()`,因为`load`事件会在所有资源(包括图片)加载完成后触发,确保不会阻塞页面渲染。 2. **避免...
**jQuery插件DataTable详解** DataTable是一款非常流行的jQuery插件,专为HTML表格提供高级功能,如数据排序、过滤、分页以及自定义显示等。它极大地增强了网页中的表格交互性,使得用户能够更加便捷地管理和操作...
在这个“jQuery自定义实时搜索插件.zip”中,我们重点探讨的是一个名为HideSeek的jQuery插件,它专门用于实现动态搜索功能,能够提升用户体验并优化网站的交互性。 HideSeek插件的核心功能是实现实时搜索,这意味着...
JQuery插件易于使用,只需要在页面中引入JQuery库和插件脚本,然后调用相应的插件方法即可。 ### 二、选项卡实现原理 1. **HTML结构**:首先,我们需要为每个选项卡内容创建一个容器,这些容器通常被隐藏,只显示...
2. **初始化插件**:使用jQuery选择器找到所有的延迟加载图片,并绑定滚动事件。 3. **滚动检测**:当用户滚动页面时,检查图片是否已进入可视区域。 4. **加载图片**:如果图片在可视区域内,将`data-src`属性的值...
5. **定时器与延迟**:利用JavaScript的`setTimeout()`或`setInterval()`函数,可以定时触发弹幕的显示,确保它们在正确的时间点出现。这通常需要与视频播放时间同步,以实现与视频内容的配合。 6. **DOM操作**:...
自定义延迟加载实现 `LazyLoad.rar`可能是另一个自定义的延迟加载实现,可能包含了更简洁或更个性化的代码结构。通常,自定义实现会包含一个核心函数,用于处理滚动事件和判断元素是否在视口内。你可以通过解压并...
2. **性能优化**:如果页面内容复杂,预览加载可能较慢,可以考虑延迟加载或只加载必要的部分。 3. **跨域问题**:由于同源策略限制,跨域的资源可能无法在预览窗口中正确显示。 通过以上介绍,我们对`jquery....
7. **兼容性和性能优化**:可能会提到如何确保插件在不同浏览器上的表现一致,以及如何通过缓存和延迟加载等方式提升性能。 8. **示例和用法**:通常会提供一些代码示例,展示如何在实际项目中引入并使用这个插件。...
4. **HoverIntent**: 该插件延迟执行悬停事件,防止因鼠标快速移动导致的误触发,常用于创建更流畅的下拉菜单或工具提示。 5. **jQuery ScrollTo**: 使元素滚动到视口的可见区域,常用于导航或平滑滚动效果。 6. **...
《jQuery插件库:jQuery华丽的CSS3滚动效果解析与应用》 在网页设计和Web开发领域,jQuery作为一款强大的JavaScript库,极大地简化了DOM操作、事件处理以及动画制作等任务。随着CSS3的普及,网页动画效果变得更加...
**jQuery Tap 插件详解** 在Web开发中,尤其是在移动端,模拟触摸事件是常见的需求,以便为触屏设备提供友好的交互...通过深入理解其内部机制,开发者可以更好地控制和优化触摸事件的处理,提升应用的性能和用户体验。
同时,注意性能优化,如延迟加载、代码压缩等,以提高网页加载速度。 总结,这个基于jQuery的超大众化登录弹层插件,以其高度的可定制性和实用性,为网页开发者提供了一种高效、便捷的解决方案,让登录和注册功能...
jQuery图片延迟加载插件Lazy Load是一种高效的前端技术,旨在优化网页性能,特别是在包含大量图片的网页上。在当今互联网环境中,用户体验是至关重要的,而快速的页面加载速度是提升用户体验的关键因素之一。Lazy ...
HoverIntent用于解决鼠标悬停事件的延迟触发问题,通常与jQuery的.show()、.hide()等方法结合使用,提高用户体验,避免因鼠标快速移动导致的闪烁现象。 以上只是jQuery众多插件中的一部分,每个插件都有其独特的...
然后,我们可以编写jQuery插件来处理图片的延迟加载。这个插件需要监听tab选项卡的切换事件,当用户切换到一个新的tab时,检查该tab内的所有图片,并对未加载的图片执行加载操作。 ```javascript (function($) { $...
jQuery Marquee插件设计得非常模块化,因此它可以与其他jQuery插件无缝集成,如Bootstrap、Isotope等,为网页带来更多的交互体验。 6. **响应式设计** 对于响应式网页设计,jQuery Marquee插件也可以很好地适应...
5. **可配置性**:良好的jQuery插件会提供多种可配置选项,如延迟时间、显示次数、是否允许再次显示等,方便开发者根据实际需求调整。 6. **兼容性**:考虑到浏览器的多样性,插件需要确保在主流浏览器上正常工作,...