摘要:清楚自己想要什么樣的組件,就自己動手?jǐn)]唄。咱們先來看看它的效果吧如果大家有時間,窩還是鼓勵大家自己動手實(shí)現(xiàn)一些小插件。于是自己就琢磨能否繼承使用方法同時保持特有組件特性。需要確保已安裝。
副標(biāo)題----為什么我要寫這個 react 插件
圖片懶加載是項(xiàng)目中常用的功能,然而現(xiàn)有 react 懶加載組件庫,用著都不是很爽了 ?。概括一下有如下幾點(diǎn):
沒有只針對 image 懶加載組件。多數(shù)組件庫都內(nèi)置了模塊、組件、腳本、iframe 懶加載功能,而弱化了 image 懶加載功能。
不支持動畫顯示效果。
不靈活,可配置度不高。
placeholder 不能組件化。
不支持響應(yīng)式圖片( picture / srcset )。
react-lazyimg-component清楚自己想要什么樣的組件,就自己動手?jǐn)]唄 ?。于是乎,react-lazyimg-component 就誕生了 ?。咱們先來看看它的效果吧:
singsong: 如果大家有時間,窩還是鼓勵大家自己動手實(shí)現(xiàn)一些小插件。
PC 預(yù)覽:
使勁猛擊這里
手機(jī)預(yù)覽(掃一掃):
什么情況需要使用它 1. 小巧輕便,簡單易用,基本無學(xué)習(xí)成本在那個 jQuery 一統(tǒng)天下的年代,擼代碼就用 jQuery 一把梭。其中
jQuery.lazyload 是一個很常用圖片懶加載插件。 可能很多像我一樣的小伙伴們,懶加載就直接上 jQuery.lazyload,早已習(xí)慣了 jQuery.lazyload 使用。 于是自己就琢磨能否繼承 jQuery.lazyload 使用方法同時保持 react 特有組件特性。這樣可以很快上手~?
singsong: 這里只是繼承了 jQuery.lazyload 配置特性,不是完全繼承。畢竟 jQuery 與現(xiàn)在主流的 MVVM 框架思想截然不同。
如果小伙伴們熟悉 jQuery.lazyload , 完全沒有學(xué)習(xí)成本直接上手 react-lazyimg-component 哈。 只說不是寫,然并卵。那我們來看看它到底好用不:
安裝// npm $> npm install react-lazyimg-component // yarn $> yarn add react-lazyimg-component使用
// 引入 import Lazyimg, { withLazyimg } from "react-lazyimg-component"; // 調(diào)用;
是不是很簡單,有木有 ?。上述只是使用 react-lazyimg-component 的默認(rèn)配置。 這里我們可以通過配置項(xiàng)來定制懶加載的行為:
// 引入 lazyimg import Lazyimg, { withLazyimg } from "react-lazyimg-component"; // 引入 volecity.js import "velocity-animate"; import "velocity-animate/velocity.ui"; // 配置 const config = { threshold: 100, // 指定觸發(fā)閾值 js_effect: "transition.fadeIn", // 支持 velocity.js 動畫效果 }; // 基于配置項(xiàng)生成對應(yīng) Lazy 組件 const Lazy = withLazyimg(config); // 調(diào)用;
接下來我們來看看 react-lazyimg-component 都那些配置項(xiàng):
threshold: 0, // 指定距離底部多少距離時觸發(fā)加載 event: "scroll", // 指定觸發(fā)事件,默認(rèn)為"scroll" js_effect: undefined, // 顯示圖片的js動畫效果 css_effect: undefined, // 顯示圖片的css動畫效果 container: window, // 指定容器,默認(rèn)為window parent: undefined, // 可以指定動畫效果作用于元素的哪個父級元素 appear: null, // 元素出現(xiàn)在可視窗口時觸發(fā)appear鉤子函數(shù) load: null, // 元素圖片的加載完后觸發(fā)load鉤子函數(shù) error: null, // 圖片加載出錯時觸發(fā)error鉤子函數(shù) node_type: "img", // 指定生成的節(jié)點(diǎn)類型,默認(rèn)為"img" placeholder: // 占位元素,除了支持普通的圖片外,還支持react組件。 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC",
是不是很眼熟 ?,如果你熟悉 jquery.lazyload,那么你只需了解如下幾個配置項(xiàng)即可:
js_effect: 指定元素顯示的動畫效果,基于velocity.js動畫實(shí)現(xiàn)。使用之前需加載velocity.js。
css_effect: 指定元素顯示的動畫效果,基于animate.css動畫實(shí)現(xiàn)。使用之前需安裝animate.css。
parent: 用于指定動畫效果作用于元素的哪個父級元素??扇≈担?/p>
父元素的 selector 選擇器(字符串)
父級層級 level(整數(shù))
node_type: 指定 react 將生成的元素類型,默認(rèn)為"img"。
placeholder: 占位元素,除了支持普通的圖片外,還支持 react 組件。
2. 支持 velocity.js、animate.css 動畫效果庫,及自定動畫效果。同時還支持動畫效果作用于父級元素。指定 js-effect 配置項(xiàng)來配置 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); // 調(diào)用;
直接上效果了 ?
指定 css-effect 配置項(xiàng)來配置 animate.css 動畫效果
注意:css-effect 依賴于 animate.css。需要確保 animate.css 已安裝。
// 配置 const config = { js_effect="transition.flipXIn" // 不會生效 css_effect={["animated", "rollIn"]} // 定制 css 動畫效果 }; const Lazy = withLazyimg(config); // 調(diào)用;
直接上效果了 ?
指定 parent 配置項(xiàng)指定父級元素動畫效果
singsong: 為什么懶加載的動畫效果只作用于目標(biāo)元素,某些條件下作用于目標(biāo)元素的父級元素會有意想不到效果哦 ?。
// 指定動畫效果作用于該父級元素
直接上效果了 ?
3. react 組件式 placeholdersingsong: 傳統(tǒng)的 placeholder 通常都是由圖片來代替,為什么不能用組件來定制,這樣可擴(kuò)展性更高。完全可以擺脫設(shè)計(jì)師的束縛,咋們開發(fā)自由發(fā)揮?! 想想有木有有點(diǎn)小雞凍 ?~~
先定義 placeholder 組件
import React from "react"; import "./style.scss"; export default props => { let { className, text, img, children } = props; return ({ if (item) { return item; } }) .join(" ")} > {img && } {text && {children || text}}); };
指定 placeholder 配置項(xiàng)為上述定義的 placeholder 組件
// 配置 const Lazy = withLazyimg({ js_effect: "transition.perspectiveDownIn", placeholder:, }); // 調(diào)用 ;
直接上效果了 ?
singsong: 圖中小火焰有木有很耀眼~
接著咋們來看看組件式 placeholder 應(yīng)用場景案例,直接上效果了 ?
上圖是分類頁通過定制顯示文案的 placeholder 組件來代替普通的灰色圖片,效果是不是看著還行 ?。這是我在實(shí)際項(xiàng)目中使用的案例。這里小伙伴可以自由發(fā)揮哈~。如果你有不錯 idea 可以@我哈,先謝了!
為了實(shí)現(xiàn) web 應(yīng)用的極致體驗(yàn),Progressive Web App 漸進(jìn)式網(wǎng)頁應(yīng)用程序越來越受到開發(fā)者們重視,其中響應(yīng)式圖片就是其中一個重要技術(shù)項(xiàng)。為了跟著大部隊(duì),咋們也需要了解了解噢!
srcset 特性實(shí)現(xiàn)響應(yīng)式圖片
// dpr
直接上效果了 ?
singsong: 這里 srcset 配合 sizes 特性可以實(shí)現(xiàn)更好的效果
picture 元素實(shí)現(xiàn)響應(yīng)式圖片
直接上效果了 ?
后語這個插件是我由項(xiàng)目中提煉出的,個人用著還挺順手,就拿出與大家分享分享。另外,畢竟個人能力有限,如果你發(fā)現(xiàn)插件有問題或有什么好的建議,也請告知一下,先這里謝過了 ?。最后歡迎star?、歡迎watch?、歡迎fork?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/51949.html
摘要:清楚自己想要什么樣的組件,就自己動手?jǐn)]唄。咱們先來看看它的效果吧如果大家有時間,窩還是鼓勵大家自己動手實(shí)現(xiàn)一些小插件。于是自己就琢磨能否繼承使用方法同時保持特有組件特性。需要確保已安裝。 副標(biāo)題----為什么我要寫這個 react 插件 圖片懶加載是項(xiàng)目中常用的功能,然而現(xiàn)有 react 懶加載組件庫,用著都不是很爽了 ?。概括一下有如下幾點(diǎn): 沒有只針對 image 懶加載組件。多...
摘要:清楚自己想要什么樣的組件,就自己動手?jǐn)]唄。咱們先來看看它的效果吧如果大家有時間,窩還是鼓勵大家自己動手實(shí)現(xiàn)一些小插件。于是自己就琢磨能否繼承使用方法同時保持特有組件特性。需要確保已安裝。 副標(biāo)題----為什么我要寫這個 react 插件 圖片懶加載是項(xiàng)目中常用的功能,然而現(xiàn)有 react 懶加載組件庫,用著都不是很爽了 ?。概括一下有如下幾點(diǎn): 沒有只針對 image 懶加載組件。多...
摘要:第一點(diǎn),先清楚你的目的你學(xué)編程想要做什么你對哪方面感興趣然后去百度查一下哪些編程語言適合做那個方向,帶著目的去學(xué)習(xí),如果一開始沒選好,中途掉頭就很可惜了。 你是不是...
摘要:但是究竟什么是區(qū)塊鏈呢如何基于區(qū)塊鏈構(gòu)建去中心化的應(yīng)用這個系列文章很有料,有圖文解釋有代碼實(shí)例,非常適合入門。想知道我接下來會寫些什么歡迎訂閱我的掘金專欄或知乎專欄前端周刊讓你在前端領(lǐng)域跟上時代的腳步。 showImg(https://segmentfault.com/img/remote/1460000010417511); 共 2044 字,讀完需 4 分鐘。本期以《提問的智慧》作...
摘要:珍藏版收集了好幾年的書回過頭來一看真不少拿過來跟你們一起分享下載鏈接我也會在官網(wǎng)上發(fā)布視頻教程呀電影呀有用的資源你們懂得作者作者科技站長官網(wǎng)百度搜索科技博客公眾號搜索 珍藏版---收集了好幾年的書,回過頭來一看,真不少,拿過來跟你們一起分享 showImg(https://img-blog.csdnimg.cn/20181123115931741.png?x-oss-process=i...
閱讀 4393·2021-10-13 09:39
閱讀 510·2021-09-06 15:02
閱讀 3254·2019-08-30 15:53
閱讀 1067·2019-08-30 13:04
閱讀 2125·2019-08-30 11:27
閱讀 2039·2019-08-26 13:51
閱讀 2128·2019-08-26 11:33
閱讀 2926·2019-08-26 10:36