热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

看完你也想编写本身的react插件

副标题—-为何我要写这个react插件图片懒加载是项目中经常运用的功用,但是现有react懒加载组件库,用着都不是很爽了?。归纳综合一下有以下几点:没有只针对image懒加载组件。

副标题—-为何我要写这个 react 插件

图片懒加载是项目中经常运用的功用,但是现有 react 懒加载组件库,用着都不是很爽了 ?。归纳综合一下有以下几点:

  • 没有只针对 image 懒加载组件。多半组件库都内置了模块、组件、剧本、iframe 懒加载功用,而弱化了 image 懒加载功用。
  • 不支撑动画显现结果。
  • 不天真,可设置度不高。
  • placeholder 不能组件化。
  • 不支撑相应式图片( picture / srcset )。

react-lazyimg-component

清晰本身想要什么样的组件,就本身着手撸呗 ?。因而乎,react-lazyimg-component 就诞生了 ?。我们先来看看它的结果吧:

singsong: 假如人人有时间,窝照样勉励人人本身着手完成一些小插件。

  • PC 预览:

用力猛击这里

  • 手机预览(扫一扫):

《看完你也想编写本身的 react 插件》

什么情况须要运用它

1. 玲珑轻巧,简朴易用,基本无进修本钱

《看完你也想编写本身的 react 插件》

在谁人 jQuery 金瓯无缺的年代,撸代码就用 jQuery 一把梭。个中
jQuery.lazyload 是一个很经常运用图片懒加载插件。 能够许多像我一样的小伙伴们,懒加载就直接上 jQuery.lazyload,早已习惯了 jQuery.lazyload 运用。 因而本身就揣摩可否继续 jQuery.lazyload 运用方法同时坚持 react 特有组件特征。如许能够很快上手~?

singsong: 这里只是继续了 jQuery.lazyload 设置特征,不是完整继续。毕竟 jQuery 与如今主流的 MVVM 框架头脑判然不同。

假如小伙伴们熟习 jQuery.lazyload , 完整没有进修本钱直接上手 react-lazyimg-component 哈。 只说不是写,然并卵。那我们来看看它究竟好用不:

装置

// npm
$> npm install react-lazyimg-component
// yarn
$> yarn add react-lazyimg-component

运用

// 引入
import Lazyimg, { withLazyimg } from 'react-lazyimg-component';
// 挪用
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
/>;

是否是很简朴,有木有 ?。上述只是运用 react-lazyimg-component 的默许设置。 这里我们能够经由过程设置项来定制懒加载的行动:

// 引入 lazyimg
import Lazyimg, { withLazyimg } from 'react-lazyimg-component';
// 引入 volecity.js
import 'velocity-animate';
import 'velocity-animate/velocity.ui';
// 设置
const cOnfig= {
threshold: 100, // 指定触发阈值
js_effect: 'transition.fadeIn', // 支撑 velocity.js 动画结果
};
// 基于设置项天生对应 Lazy 组件
const Lazy = withLazyimg(config);
// 挪用
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
/>;

接下来我们来看看 react-lazyimg-component 都那些设置项:

threshold: 0, // 指定间隔底部若干间隔时触发加载
event: 'scroll', // 指定触发事宜,默许为'scroll'
js_effect: undefined, // 显现图片的js动画结果
css_effect: undefined, // 显现图片的css动画结果
container: window, // 指定容器,默许为window
parent: undefined, // 能够指定动画结果作用于元素的哪一个父级元素
appear: null, // 元素出如今可视窗口时触发appear钩子函数
load: null, // 元素图片的加载完后触发load钩子函数
error: null, // 图片加载失足时触发error钩子函数
node_type: 'img', // 指定天生的节点范例,默许为'img'
placeholder: // 占位元素,除了支撑一般的图片外,还支撑react组件。
'data:image/png;base64,iVBORw0KGgo#ANSUhEUg#AE#ABCAY#AfFcSJ#AAXNSR0IArs4c6Q#ARnQU1BAACxjwv8YQU#AJcEhZcwAADsQ#7EAZUrDhs#ANSURBVBhXYzh8+PB/AAffA0nNPuCL#AAElFTkSuQmCC',

是否是很眼熟 ?,假如你熟习 jquery.lazyload,那末你只需相识以下几个设置项即可:

  • js_effect: 指定元素显现的动画结果,基于velocity.js动画完成。运用之前需加载velocity.js
  • css_effect: 指定元素显现的动画结果,基于animate.css动画完成。运用之前需装置animate.css
  • parent: 用于指定动画结果作用于元素的哪一个父级元素。可取值:

    • 父元素的 selector 选择器(字符串)
    • 父级层级 level(整数)
  • node_type: 指定 react 将天生的元素范例,默许为’img’。
  • placeholder: 占位元素,除了支撑一般的图片外,还支撑 react 组件。

2. 支撑 velocity.js、animate.css 动画结果库,及自定动画结果。同时还支撑动画结果作用于父级元素。

  • 指定 js-effect 设置项来设置 velocity.js 动画结果

注重:js-effect 依赖于 velocity.js。须要确保 velocity.js 已加载。

// 引入 lazyimg
import Lazyimg, { withLazyimg } from 'react-lazyimg-component';
// 引入 volecity.js
import 'velocity-animate';
import 'velocity-animate/velocity.ui';
// 设置
const cOnfig= {
placeholder: 'loading.svg',
js_effect: 'transition.fadeIn', // 支撑 velocity.js 动画结果
};
const Lazy = withLazyimg(config);
// 挪用
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
/>;

直接上结果了 ?

《看完你也想编写本身的 react 插件》

  • 指定 css-effect 设置项来设置 animate.css 动画结果

注重:css-effect 依赖于 animate.css。须要确保 animate.css 已装置。

// 设置
const cOnfig= {
js_effect="transition.flipXIn" // 不会见效
css_effect={['animated', 'rollIn']} // 定制 css 动画结果
};
const Lazy = withLazyimg(config);
// 挪用
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
/>;

直接上结果了 ?

《看完你也想编写本身的 react 插件》

  • 指定 parent 设置项指定父级元素动画结果

singsong: 为何懒加载的动画结果只作用于目的元素,某些条件下作用于目的元素的父级元素会有意想不到结果哦 ?。


// 指定动画结果作用于该父级元素


className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
css_effect={['animated', 'flipInY']} // 定制 css 动画结果
parent=".example" // 指定父级元素选择器,也能够指定父级层级level:2
/>

直接上结果了 ?

《看完你也想编写本身的 react 插件》

3. react 组件式 placeholder

singsong: 传统的 placeholder 一般都是由图片来替代,为何不能用组件来定制,如许可扩展性更高。完整能够挣脱设计师的约束,咋们开辟自由发挥?! 想一想有木有有点小鸡冻 ? ~~

  • 先定义 placeholder 组件

import React from 'react';
import './style.scss';
export default props => {
let { className, text, img, children } = props;
return (
className={['placeholder', className]
.filter(item => {
if (item) {
return item;
}
})
.join(' ')}
>
{img && }
{text && {children || text}}


);
};

// 设置
const Lazy = withLazyimg({
js_effect: 'transition.perspectiveDownIn',
placeholder: ,
});
// 挪用
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
/>;

直接上结果了 ?

《看完你也想编写本身的 react 插件》

singsong: 图中小火焰有木有很刺眼 ~

接着咋们来看看组件式 placeholder 运用场景案例,直接上结果了 ?

《看完你也想编写本身的 react 插件》

上图是分类页经由过程定制显现案牍的 placeholder 组件来替代一般的灰色图片,结果是否是看着还行 ?。这是我在现实项目中运用的案例。这里小伙伴能够自由发挥哈~。假如你有不错 idea 能够@我哈,先谢了!

4. 相应式图片( picture / srcset )

为了完成 web 运用的极致体验,Progressive Web App 渐进式网页运用程序愈来愈遭到开辟者们注重,个中相应式图片就是个中一个主要手艺项。为了随着大军队,咋们也须要相识相识噢!

// dpr
className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
srcSet="source_1x.png 1x, source_2x.png 2x, source_3x.png 3x, source_3.5x.png 3.5x"
js_effect="transition.bounceIn"
/>

直接上结果了 ?

《看完你也想编写本身的 react 插件》

singsong: 这里 srcset 合营 sizes 特征能够完成更好的结果




className="lazy"
src={'http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg'}
js_effect="transition.expandIn"
/>

直接上结果了 ?

《看完你也想编写本身的 react 插件》

后语

这个插件是我由项目中提炼出的,个人用着还挺随手,就拿出与人人分享分享。别的,毕竟个人能力有限,假如你发明插件有题目或有什么好的发起,也请示知一下,先这里谢过了 ?。末了迎接star?、迎接watch?、迎接fork?


推荐阅读
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 解决lib-flexible安装过程中遇到的错误问题
    在安装 lib-flexible 时,遇到了 `saveError ENOENT: No such file or directory` 错误,具体表现为无法打开 `E:\Github\SDIO\package.json` 文件。解决此问题的关键在于确保项目根目录下存在 `package.json` 文件,并且在正确的项目路径中执行安装命令。建议先检查项目结构,确认文件是否存在,然后再尝试重新安装依赖。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
author-avatar
萱萱loveTFOOYS
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有