引:
目前流行的页面延迟加载以及渲染组件,参考 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);
});
});
分享到:
相关推荐
Vue组件,用于Vue组件的延迟渲染,改善初次进入页面或者数据量较大的页面操作时出现卡顿的情况
自定义TreeGrid 该组件实现的功能: 1.展示树列表,左边是树,右边是表 ...4.支持本地数据展示,和远程数据延迟加载 5.每个值可以有自身的转换器formatter 6.支持行单击事件 7.支持拖拽改变列宽 8.加载时的loading效果
相关文章:Unity3D中的Texture2D纹理失真解决办法//动态加载图片IEnumerator loadImage(){WWW www = new WWW
无限滚动+图像延迟加载 使用HTML IntersectionObserver API实现无限滚动和图像延迟加载。 阅读上的文章 观看实时预览: : 快速入门指南 克隆仓库 运行yarn安装项目依赖项 运行yarn start启动项目。
延迟加载 延迟加载是一种优化Web应用程序以及在移动应用程序上进行优化的技术。 用户最初或永远可能不需要某些组件,渲染这些组件会损害应用程序的性能,尤其是在要显示大量图像的情况下。 这是一个演示React应用...
在 ReactJS 中加载更多组件 - 一种递归方法 问题… 在一个项目中,我们想过创建一个无限滚动的页面,即每当到达页面底部时,我们加载下一页等等。 最初我们探索了一些类似的开源组件,但所有可用的组件都有一个...
Stencil利用TypeScript,JSX,微小的虚拟DOM层,高效的单向数据绑定,异步渲染管道(类似于React Fiber)和开箱即用的延迟加载功能,并生成可运行的100%基于标准的Web组件在任何支持Custom Elements v1规范的...
下面小编就为大家带来一篇easyui datagrid 大数据加载效率慢,优化解决方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Stencil利用TypeScript,JSX,微小的虚拟DOM层,高效的单向数据绑定,异步渲染管道(类似于React Fiber)和开箱即用的延迟加载功能,并生成可运行的100%基于标准的Web组件在任何支持Custom Elements v1规范的...
延迟加载(仅在需要时加载深度选项的数据) 键盘支持(使用上箭头和下箭头键进行导航,使用Enter键选择选项,等等) 丰富的选项和高度可定制的 支持多种浏览器(请参阅) RTL支持 需要Vue 2.2+ 入门 建议通过npm...
React使用延迟加载图像 :sunrise: :high_voltage: 轻松将图像延迟加载添加到您的React应用 react-use-lazy-load-image使用为延迟加载的图像提供高性能解决方案,该图像不涉及滚动事件侦听器。 IntersectionObserver...
Stencil利用TypeScript,JSX,微小的虚拟DOM层,高效的单向数据绑定,异步渲染管道(类似于React Fiber)和开箱即用的延迟加载功能,并生成100%基于标准运行的Web组件在任何支持Custom Elements v1规范的浏览器中...
您创建执行异步作业以加载数据的操作,创建减速器以将此数据保存到 redux 状态,然后将数据连接到您的组件或容器。 通常这是非常相似的日常任务。 此外,通常我们希望预加载数据。 特别是如果您正在构建通用应用程序...
App 组件化 加载框架,维护一个树状数据结构进行管理、深度优先搜索 组件化框架-》树状结构 一、需求介绍 > 随着目前 App 的组件越来越多,同时每一个组件的初始化工作也都隶属于本组件内。基于目前的组件化 路由...
该组件不支持数据的延迟加载,因此仅用于小型数据集。 换句话说,这是为Grid太重,过度杀伤等使用案例而设计的。 BeanTable的单元格可以由文本,html或组件填充。 当前仅包括最小的样式,不提供滚动等。 该组件...
是 Android 上一个可以无限往下滑进行列表数据加载的控件。 4、Android Horizontal ListView 是 Android 上一个水平滑动的 ListView 组件。 5、Android ViewBadger 视图布局。 6、滑动刷新的ListView Android ...
为了页面美观,请求接口的时候延迟没有数据,页面感觉狠卡顿,封装loading,请求接口成功后隐藏掉(我这是用的vant 组件根据自己情况进行改变)。 第一步: 建立loading.vue 加载中... [removed] export ...
Stencil利用TypeScript,JSX,微小的虚拟DOM层,高效的单向数据绑定,异步渲染管道(类似于React Fiber)和开箱即用的延迟加载功能,并生成100%基于标准运行的Web组件在任何支持Custom Elements v1规范的浏览器中...
* 自定义过滤就地单元格编辑记录延迟加载 * 服务器端记录操作 * 实时流更新分层数据支持和树视图 * 可定制的外观 可定制的单元格内容 类似 Excel 的透视 * 状态持久性键盘导航 数据导出到 CSV 数据导出到 Excel * 行...
Stencil利用TypeScript,JSX,微小的虚拟DOM层,高效的单向数据绑定,异步渲染管道(类似于React Fiber)和开箱即用的延迟加载功能,并生成可运行的100%基于标准的Web组件在任何支持Custom Elements v1规范的...