react-瀑布流

import React,{Component} from 'react';
import {fetchData} from '../main';
class Pinterest extends Component{
constructor(props){
super(props);
this.ajaxPull = this.ajaxPull.bind(this);
this.state={
leftData:[],
centerData:[],
rightData:[]
};
this.ajax = 1;

};
//@decorateArmour
componentWillMount(){
this.ajaxData();
}
componentDidMount(){
document.addEventListener('scroll',this.ajaxPull)
}
componentWillUnmount(){
document.removeEventListener('scroll',this.ajaxPull);
}
ajaxData=()=>{
const {leftData,centerData,rightData}= this.state;
this.ajax = 0;
fetchData({reqUrl:'/zhanglei/common.json'}).then(result=>{
this.ajax = 1;
result.data.pull.content.map(item=>{
const a = this.getMinContain();
switch (a.className){
case 'u1':leftData.push(item);break;
case 'u2':centerData.push(item);break;
case 'u3':rightData.push(item);break;
default:return null;
}
this.setState({leftData,centerData,rightData});
});
});
};
//获取高度最低的一个
getMinContain = () =>{
const {newPinterest} = this;
const {childNodes} = newPinterest;
let minData = childNodes[0];
childNodes&&childNodes.forEach(item=>{
if(item.offsetHeight<minData.offsetHeight){
minData = item
}
});
return minData;
};
//滚动事件
ajaxPull(){
const height = window.innerHeight;
const scroll = document.body.scrollTop;
const domHeight = document.body.scrollHeight;
if(scroll+height>domHeight - 132&&this.ajax){
this.ajaxData();
}
};
mapListToHtml=(data)=>{
const arr = ['fadeIn','rotateIn','zoomIn'];
const animate = parseInt(Math.random()*3);
return data.map((item,index)=><li
key={index}>
<img style={{WebkitAnimation:`${arr[animate]} 0.8s ease-in-out 1 0s alternate forwards`}} src={`/img/${item.url}`} alt={item.name}/>
</li>);
};
render(){
const {leftData,centerData,rightData} = this.state;
return (<div ref={ref=>this.newPinterest = ref} className="newPinterest clearfix">
<ul ref={ref=>this.leftCol = ref} className="u1">
{!!leftData&&this.mapListToHtml(leftData)}
</ul>
<ul ref={ref=>this.centerCol = ref} className="u2">
{!!centerData&&this.mapListToHtml(centerData)}
</ul>
<ul ref={ref=>this.rightCol = ref} className="u3">
{!!rightData&&this.mapListToHtml(rightData)}
</ul>
</div>)
}
}
export default Pinterest;

转载于:https://www.cnblogs.com/leijuan/p/7841071.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值