故事背景:很多時候前端要做一個類似於輪播圖一樣的廣告位,如果是是使用React和Ant Design的話,可以很方便的實現。
要實現如圖效果:數據兩條兩條的切換,動畫平滑
原始數據:
let list=[ { id:'0', title:'我是廣告一號', }, { id:'2', title:'我是廣告二號', }, { id:'3', title:'我是廣告三號', }, { id:'4', title:'我是廣告四號', }, { id:'5', title:'我是廣告五號', }, { id:'6', title:'我是廣告六號', } ];
處理成下面集合,用於兩條兩條數據得顯示,想界面上顯示3條或者更多可按照相同邏輯處理
處理的方法:
let list=[ { id:'0', title:'我是廣告一號', }, { id:'2', title:'我是廣告二號', }, { id:'3', title:'我是廣告三號', }, { id:'4', title:'我是廣告四號', }, { id:'5', title:'我是廣告五號', }, { id:'6', title:'我是廣告六號', } ]; let divList = []; let length = list.length / 2; for (let i = 0; i < length; i++) { let itemList = []; for (let j = i * 2; j < i * 2 + 2; j++) { if (list[j]) itemList = [...itemList, list[j]]; else itemList = [...itemList, {}]; } if (itemList.length > 0) divList = [...divList, itemList]; }
具體操作步驟:
1.在項目中引入Ant Design, 可用npm install antd;
2.在具體的頁面引入Carousel組件,可用import {Carousel} from 'antd';
3.寫好HTML和CSS,搭建好界面,將數據list處理成想要的形式(上面介紹了);
4.運用Carousel,將處理好的數據當做輪播圖顯示出來。一般的輪播圖是顯示圖片,這里只要讓他垂直輪播文字,就能實現我們想要的效果。Carousel設置為垂直顯示:vertical, 這個參數的設置可參考antdesign官網:https://ant.design/components/carousel-cn/;
完成的HTML和JS代碼如下(我是寫在umi框架中的,不過框架不重要,和功能沒有太大關系,只要理解,在哪都能引用):
import {Carousel} from 'antd'; import styles from './index.less'; function Index(){ let list=[ { id:'0', title:'我是廣告一號', }, { id:'2', title:'我是廣告二號', }, { id:'3', title:'我是廣告三號', }, { id:'4', title:'我是廣告四號', }, { id:'5', title:'我是廣告五號', }, { id:'6', title:'我是廣告六號', } ]; let divList = []; let length = list.length / 2; for (let i = 0; i < length; i++) { let itemList = []; for (let j = i * 2; j < i * 2 + 2; j++) { if (list[j]) itemList = [...itemList, list[j]]; else itemList = [...itemList, {}]; } if (itemList.length > 0) divList = [...divList, itemList]; } console.log(divList) return( <div className={styles.headline}> <div className={styles.title}> <b>商務</b><br/> <b>頭條</b> </div> <div className={styles.advertise}> <Carousel vertical autoplay={false} dots='true'> { divList.map((s, i) => <div key={i}> <ul> { s.map((s1, i) => s1.id ? <li key={s1.id}> {s1.title}</li>: <li key={i}></li> ) } </ul> </div> ) } </Carousel> </div> </div> ) } export default Index;
對應的css:(我是用最簡單的less寫的)
.headline{ padding: 16px; border-bottom: 1px solid #e5e5e5; .title{ width: 56px; display: inline-block; padding-right: 16px; font-size: 17px; color: #1A1A1A; border-right: 1px solid #e5e5e5; } .advertise{ width: 50%; display: inline-block; position: relative; top: 8px; ul{ margin-bottom: 0; font-size: 12px; color: #454545; padding: 4px 0 4px 15px; list-style: none; li{ line-height: 22px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } } } }