`
yiminghe
  • 浏览: 1460327 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据延迟加载组件

阅读更多

引:

目前流行的页面延迟加载以及渲染组件,参考 kissy 所写,练习一下YUI3模块编写。


点击查看演示


原理:

1.对于目前屏幕以外的图片src设置为同一占位图片,监听窗体滚动,当图片进入可见区域,替换src为真实地址。


2.对于屏幕外延迟渲染的html存放在隐藏(visibility:hidden)的textarea中,并且该textarea占据本该渲染的位置,监控窗体滚动,当textarea进入可见区域,将该textarea内的value,插入到textarea之前,并删除掉textarea。


PS:近来重构 kissy 的一些注意点:

 

1.注意 textarea 内容包含脚本时的情况,由于非firefox浏览器不会自动触发其中的脚本,不应该在将html插入到textarea的父结点后,在父节点下搜寻script 节点对其内容进行触发(会使原本存在的脚本再次执行),而应该对textarea的内容html进行正则表达式 script 抽取,并对html过滤script后再插入容器,这样也避免了浏览器判断。


2.callBack 没有意义,我们关心的是什么时候 textarea 的内容会被渲染到 dom 树中,随之进行一些 关联textarea部分的内容 组件初始化操作,而不需要已经存在于dom数中的节点何时会在用户的预查区域(确实需要的话可将该节点内容放入textarea中做延迟渲染)。

 


3.触发渲染事件注意使用setTimeout异步,由于可能用户在当前位置刷新,这时在初始化 datalazyloader 时就会发生渲染事件,那么在初始化后的捕捉就没有意义了:

 

var l=new lazyloader();//可能一开始就触发了render事件,这时尚没有on
l.on("render",function(){});
 

 


代码结构:

/**
 YUI3数据延迟加载组件
 修改自:http://code.google.com/p/kissy/
 **/
YUI.add('dataLazyLoad', function (Y) {
    function DataLazyLoad(config) {
        //实例或工厂方法都可以
    }
    DataLazyLoad.NAME = "dataLazyLoad";
    DataLazyLoad.ATTRS = {
        containers: {
            //Y.all形式参数统一化处理
            setter: function (nodes) {}
        }
    };
    Y.extend(DataLazyLoad, Y.Base, {
        //得到可见的文档纵轴下限
        _getLowerThreshold: function () {},
        //初始化函数
        initializer: function (cfg) {
            //即将由于延迟加载而显示的图片元素
            //初始屏下的才惰性加载
            //初始屏下的才惰性加载,其他立即处理
        },
        //根据滚动条位置开始延迟加载
        _loadByThreshold: function () {},
        // the destroy() lifecycle phase
        destructor: function () {}
    });
    Y.DataLazyLoad = DataLazyLoad;
});

 

调用:

YUI({
    modules: {
        dataLazyLoad: {
            fullpath: 'datalazyload.js',
            requires: ['event', 'base', 'node', 'test']
        }
    }
}).use("dataLazyLoad", function (Y) {
    var dataLazyLoad = new Y.DataLazyLoad({
        //Y.all参数格式
        containers: "body"
    });
    //即将由于延迟加载而显示的图片元素
    dataLazyLoad.on("lazyShow", function (e) {
        var img = e.details[0];
        if (window.console) console.log(img);
    });
});
 

 

 

1
0
分享到:
评论

相关推荐

    数据延迟加载

    在Web开发中,特别是在JavaScript库和框架如KISSY中,数据延迟加载通常用于处理大型数据集或复杂组件。KISSY 是一个轻量级的JavaScript模块化开发框架,它支持延迟加载功能,帮助开发者按需加载模块,提高页面的加载...

    select懒加载组件

    在Vue.js框架中,"select懒加载组件"是一种优化大量数据下选择列表性能的策略。这类组件通常用于处理数据量过大的下拉菜单,避免一次性加载所有选项导致页面卡顿或加载时间过长。Vue.js提供了强大的数据绑定和组件化...

    Vue组件用于Vue组件的延迟渲染

    1. **Vue懒加载(Vue懒组件)**:Vue 允许我们按需加载组件,即在实际需要时才去获取组件的代码。这可以通过 `import()` 动态导入实现。例如: ```javascript // 在路由配置中 { path: '/some-path', component: ...

    微信小程序-图片预加载组件

    本篇将详细介绍微信小程序中的图片预加载组件及其源码解析。 首先,我们要理解微信小程序的图片加载机制。默认情况下,微信小程序会在图片实际展示时才开始下载,这可能导致页面加载时图片闪烁或延迟显示。通过预...

    ExtJs GridPanel延时加载.rar

    GridPanel是ExtJs中一个非常重要的组件,它用于展示表格数据,而延时加载则是一种优化大量数据处理的技术,可以显著提高用户界面的响应速度。 1. **ExtJs GridPanel**: GridPanel是ExtJs中的核心组件之一,它提供...

    ext扩展 延时加载

    在Ext JS中,延时加载主要应用于数据存储(Ext.data.Store)和组件(如Grid、Tree等)。例如,当一个大型数据集被加载到Grid中时,不是一次性加载所有记录,而是分页加载,只有用户滚动到可视区域时,才会请求更多...

    Ext下多tab的延迟加载问题.docx

    在ExtJS中,延迟加载(lazy loading)是一种优化技术,主要用于处理大量数据或组件时,避免一次性加载所有内容导致的性能问题。在多标签(tab)场景下,如果每个标签页都包含复杂的组件或需要进行大量的网络请求,...

    vuelazybackgroundimages一个简单的Vue组件用于延迟加载背景组件

    2. **组件使用**:在模板中,为需要延迟加载背景图片的元素使用该组件,将图片数组绑定到组件的属性上。 3. **监听滚动事件**:组件内部会监听滚动事件,当元素进入视口时,会触发图片的加载。 4. **占位符**:在...

    HTML延迟加载图片 html图片延迟加载技术大全.zip

    4. **Vue.js、React等框架的解决方案**:对于使用现代前端框架构建的应用,有专门的组件或库如vue-lazyload、react-lazyload等,它们提供了与框架集成的懒加载功能。 5. **预加载策略**:除了延迟加载外,还可以...

    Flex 延迟加载 问题说明 处理 实现

    通过采用延迟加载技术,可以让不立即可见或使用的组件延迟加载,从而提高整体性能。 ##### 4.1 实现方法 Flex提供了多种方式来实现延迟加载,常见的有: - **使用`Loader`类**:通过动态地将SWF文件加载到容器中,...

    网页图片延迟加载插件

    网页图片延迟加载插件通常包含以下组件: 1. **JavaScript代码**:用于监听滚动事件、检测图片是否进入视口以及加载图片。 2. **CSS样式**:可能包含一些预加载占位符或者过渡效果,使得图片在加载过程中看起来更...

    大数据量高性能前端表格grid 动态加载数据

    首先,"高性能grid"是指一种能够快速渲染和操作大量数据的前端组件。它通常具备优秀的性能优化手段,如虚拟滚动、延迟渲染和智能内存管理等。Grid的核心目标是在保持响应速度的同时,提供流畅的用户交互体验。 动态...

    延迟加载、迫切加载的用法

    延迟加载(Lazy Loading)和迫切加载(Eager Loading)是两种常见的数据加载策略,它们分别适用于不同的场景和需求。 延迟加载,顾名思义,是指在实际需要时才加载数据或资源。这种技术在网页开发、数据库设计和...

    微信小程序的图片预加载组件.rar

    此外,为了提高性能,预加载组件可能会利用微信小程序的`wx.getImageInfo`接口来获取图片的尺寸信息,从而在下载前进行适当的缩放,减少加载的数据量。 总结来说,"微信小程序的图片预加载组件"是提高小程序性能和...

    Android延迟加载综合案例

    在Android开发中,延迟加载(Lazy Loading)是一种优化策略,用于提高应用性能和用户体验,特别是当处理大量数据或资源时。本案例主要关注在ListView和ImageView中的应用,这两个组件经常在展示大量信息时使用。 ...

    Vue下滚动到页面底部无限加载数据的示例代码

    图片懒加载是一种优化技术,用于延迟加载图片,直到用户滚动到图片所在的位置。在本示例代码中,我们使用懒加载来加载用户的头像。 5. 结合原生 js 来写 scroll 事件 在本示例代码中,我们使用原生 js 来写 scroll...

    fragment延时加载demo

    在`AbsFragment`类中,这些通用的延时加载逻辑可以被抽象出来,子类只需要关注各自的数据加载细节。这样,我们可以在多个Fragment之间复用代码,提高代码的可维护性和一致性。 在提供的`fragmenttest`压缩包中,...

    dhtmlxgrid大数据的延迟加载

    延迟加载的核心思想是只加载用户当前需要的数据,而不是一次性加载所有数据。当用户滚动表格或者改变筛选条件时,dhtmlxGrid会向服务器发送请求,获取新的数据块,并将这些数据动态插入到表格中。这样既保持了用户...

    layui异步加载table表中某一列数据的例子

    当处理大量数据时,为了避免页面加载时的延迟,常常采用异步加载数据的方式,即只在需要的时候加载数据,而不是一次性加载所有数据。 在给出的例子中,演示了通过异步请求获取数据,并将数据动态添加到table中某一...

    页面延迟加载JS包 lazyload.js scrollloading.js

    接着,需要对需要延迟加载的元素进行标记,比如使用特定的类名或数据属性。然后配置库的选项,例如设置加载阈值、加载动画等。最后,初始化库并让其监控页面,自动处理延迟加载。 5. **性能优化** 使用延迟加载...

Global site tag (gtag.js) - Google Analytics