摘要:實現中間圓心基本樣式容器元件樣式圓心樣式生成動畫元件元件個數,定制個數元件元素集合生成組件自己的樣式模擬渲染基本動畫元件的,控制交互最后,下面是基本的不考慮不支持的情況,不支持都不用開發,直接用圖,性價比更高里面用到的一個混淆方法
前言
熟悉 React 的思想后,我們先來嘗試開發一個單純的小組件,可以對比一下是不是比以前的開發模式更加舒適了,這里我主要以一個 Loadding 組件來舉栗子,實現了幾個基本的功能:
一種類型的 loadding(菊花轉)
能夠設置 loadding 的三個屬性:width height color
能夠控制 loadding 的顯示和隱藏
其實對于一個簡單需求來說,這三個屬性已經很實用了。但是去網上看一些外國大神寫的組件,有一些不明白的地方,所以自己就慢慢搞,do it!
設計我想這樣用 loadding 組件:
所以我定義這個組件的基本結構如下:
var Loadding = React.createClass({ // 控制組件屬性的類型 propTypes: {}, // 控制組件屬性的默認值 getDefaultProps: function () {}, // 組裝基本的內聯樣式 getComponentStyle: function () {}, // 渲染基本的組件,拆分 render 方法的粒度 renderBaseComp: function () {}, // 最終的渲染方法 render: function () {} });
這個組件中,我使用的 內聯樣式 來控制組件的內部基本樣式的穩定。其實有時候我們會覺得內聯樣式不好,但是我個人覺得每一種設置 CSS 形式的方法,用在合適的場景中就是正確的。
每部分的具體實現如下,代碼中有一些講解(這里我不會介紹具體 loadding 效果是怎么出來的,看代碼應該就會明白,主要介紹一個 react 制作簡單組件的思路和寫法)對于擴展性來說,
實現你還可以加入 className 和 type 這些修飾性的屬性,但是我更傾向于迭代式的組件開發,小組件就要具有良好的封閉性,使用接口簡單,大組件才考慮更好的魯棒性和可擴展性,這樣開發一個組件的性價比才高。需要注意對 getDefaultProps 的理解,只有當使用接口的人代碼中根本沒有寫那個屬性的時候,才會使用定義的默認值。
var Loadding = React.createClass({ propTypes: { width: React.PropTypes.oneOfType([ React.PropTypes.number, React.PropTypes.string ]), height: React.PropTypes.oneOfType([ React.PropTypes.number, React.PropTypes.string ]), color: React.PropTypes.string, active: React.PropTypes.bool }, getDefaultProps: function() { return { color: "#00be9c", height: 30, width: 30, active: false }; }, getComponentStyle: function() { var width = this.props.width, height = this.props.height, color = this.props.color; /* 中間圓心 */ var cWidth = 0.4 * width, cHeight = 0.4 * height, cMarginLeft = -0.5 * cWidth, cMarginTop = -0.5 * cHeight; /* 基本樣式 */ return { loaddingStyle: { // loadding 容器 width: width, height: height }, lineStyle: { // loadding 元件樣式 background: color }, centerStyle: { // loadding 圓心樣式 width: cWidth, height: cHeight, marginLeft: cMarginLeft, marginTop: cMarginTop } }; }, renderBaseComp: function(compStyle) { /* 生成動畫元件 */ var n = 4; // 元件個數,todo: 定制個數 var lines = []; // 元件元素集合 for (var i = 0; i < n; i++) { lines.push(); } return lines; }, render: function() { /* 生成組件自己的樣式 */ var compStyle = this.getComponentStyle(); /* 模擬渲染基本動畫元件 */ var lines = this.renderBaseComp(compStyle); // loadding 的class,控制交互 var loaddingClasses = cx({ loadding: true, active: this.props.active }); return ({lines}); } });
最后,下面是基本的 SASS(不考慮不支持的情況,不支持都不用開發,直接用圖,性價比更高)
@include keyframes(load) { 0% { opacity: 0; } 25% { opacity: .25; } 50% { opacity: .5; } 75% { opacity: .75; } 100% { opacity: 1; } } .loadding { display: none; position: absolute; &.active { display: block; } .loadding-center { position: absolute; left: 0; top: 50%; background: #fff; border-radius: 50%; } .line { position: absolute; top: 0; left: 0; height: 100%; .top { content: ""; display: block; width: 1px; font-size: 0; height: 50%; } .bottom { @extend .top; } @for $i from 1 through 4 { &:nth-child(#{$i}) { transform:rotate(45deg * ($i - 1)); .top { @include animation(load, 0.8s, linear, 0s, infinite); } .bottom { @include animation(load, 0.8s, linear, 0.4s + $i/10, infinite); } } } } }
里面用到的一個 animation 混淆方法:
@mixin keyframes($name) { @-webkit-keyframes #{$name} { @content; } @-moz-keyframes #{$name} { @content; } @-ms-keyframes #{$name} { @content; } @keyframes #{$name} { @content; } } @mixin animation ($name, $duration, $func, $delay, $count, $direction: normal) { -webkit-animation: $name $duration $func $delay $count $direction; -moz-animation: $name $duration $func $delay $count $direction; -o-animation: $name $duration $func $delay $count $direction; animation: $name $duration $func $delay $count $direction; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78202.html
摘要:選擇的主要原因大概是因為該框架出現較早,感覺上會相對成熟,日后學習中遇到問題想要查找答案相對簡單一些,對,就是這么簡單。多說無益,接下來開始的學習,我按照我學習中帶著的問題來一一解答,完成我的入門筆記。主要是針對前端的組件化開發。 這兩天得空,特意來折騰了以下時下火熱的前端框架react,至于為什么選react,作為一個初學者react和vue在技術上的優劣我無權評論,也就不妄加評論了...
摘要:組件關注的只應該是狀態,不同的狀態呈現不同的表現形式。組件一切都是組件倡導開發者將切分成一個個組件從而達到松耦合及重用的目的。只不過的命名是進入狀態之前跟進入狀態之后。 前端已不止于前端-ReactJs初體驗 原文寫于 2015-04-15 https://github.com/kuitos/kuitos.github.io/issues/21 要說2015年前端屆最備受矚目的技術是啥...
摘要:更多相關介紹請看這特點僅僅只是虛擬最大限度減少與的交互類似于使用操作單向數據流很大程度減少了重復代碼的使用組件化可組合一個組件易于和其它組件一起使用,或者嵌套在另一個組件內部。在使用后,就變得很容易維護,而且數據流非常清晰,容易解決遇到的。 歡迎移步我的博客閱讀:《React 入門實踐》 在寫這篇文章之前,我已經接觸 React 有大半年了。在初步學習 React 之后就正式應用到項...
摘要:最近剛進入公司實習,找工作的過程中發現還是基礎比較重要吧。分享一些關于前端開發入門和入門的小項目小任務吧。百度前端技術學院的任務其實能把百度前端技術學院的任務做完就很不錯啦,這里推薦幾個比較好的任務。可以學到前端工程化和入門的相關知識。 最近剛進入公司實習,找工作的過程中發現還是基礎比較重要吧。分享一些關于前端開發入門和React入門的小項目(小任務)吧。 百度前端技術學院的任務 其實...
閱讀 3329·2021-09-08 09:45
閱讀 1262·2019-08-30 15:53
閱讀 1541·2019-08-30 14:12
閱讀 990·2019-08-29 17:01
閱讀 2581·2019-08-29 15:35
閱讀 403·2019-08-29 13:09
閱讀 1982·2019-08-29 12:32
閱讀 3095·2019-08-26 18:37