this.imgsArrangeArr = imgsArrangeArr; 這個值好像沒改變 誰能幫我解惑
require('normalize.css/normalize.css');
require('styles/App.scss');
import React from 'react';
//獲取圖片數(shù)據(jù)
let imageDatas = require('../data/imageDatas.json');
//利用自執(zhí)行函數(shù) 把圖片名轉成圖片URL
imageDatas = (function genImageURL(imageDatasArr){
? for(var i=0;i<imageDatasArr.length;i++){
? ? let singleImageData = imageDatasArr[i];
? ? singleImageData.imageURL = require('../images/'+singleImageData.fileName);
? ? imageDatasArr[i] = singleImageData;
? }
? return imageDatasArr;
})(imageDatas);
//獲取區(qū)間內的一個隨機值
function getRangeRandom(low,high){
? return Math.ceil(Math.random() * (high-low) + low);
}
class ImgFigure extends React.Component{
? constructor(props){
? ? super(props);
? ? let styleObj = {};
? ? //如果props屬性中指定了這張圖片的位置,則使用
? ? if(this.props.arrange.pos){
? ? ? styleObj = this.props.arrange.pos;
? ? ? console.log(styleObj);
? ? }
? }
? imgClick(event) {?
? ? console.log("執(zhí)行imgClick事件");
? ? console.log(this.state);
? }
? render(){
? ? return (
? ? ? ? <figure className="img-figure"? onClick={this.imgClick} style={this.styleObj}>
? ? ? ? ? <img src={this.props.data.imageURL} alt={this.props.data.title}/>
? ? ? ? ? <figcaption>
? ? ? ? ? ? <h2 className="img-title">{this.props.data.title}</h2>
? ? ? ? ? </figcaption>
? ? ? ? </figure>
? ? ? );
? }
}
class AppComponent extends React.Component {
? constructor(){
? ? super();
? ? const Constent= {
? ? ? centerPos:{
? ? ? ? left:0,
? ? ? ? top:0
? ? ? },
? ? ? hPosRange:{//水平方向的取值范圍
? ? ? ? leftSecX:[0,0],
? ? ? ? rightSecX:[0,0],
? ? ? ? y:[0,0]
? ? ? },
? ? ? vPosRange:{//垂直方向的取值范圍
? ? ? ? x:[0,0],
? ? ? ? topY:[0,0]
? ? ? }
? ? };
? ? this.imgsArrangeArr = [
? ? ? // {
? ? ? //? ?pos:{
? ? ? //? ? ?left:'0',
? ? ? //? ? ?top:'0'
? ? ? //? ?}
? ? ? // }
? ? ];
? ? this._componentDidMount = this._componentDidMount.bind(this);
? }
? //組件加載以后,為每張圖片計算其位置的范圍
? _componentDidMount(){
? ? //首先拿到舞臺的大小
? ? let stageDom = this.refs.stage,
? ? ? ? stageW = stageDom.scrollWidth,
? ? ? ? stageH = stageDom.scrollHeight,
? ? ? ? halfStageW = Math.ceil(stageW / 2),
? ? ? ? halfStageH = Math.ceil(stageH / 2);
? ? //拿到一個imgFigure的大小 因為每個大小都一樣 只要那第一個就可以了
? ? let imgFigureDom = this.refs.imgFigures0,
? ? ? ? imgW = imgFigureDom.scrollWidth,
? ? ? ? imgH = imgFigureDom.scrollHeight,
? ? ? ? halfImgW = Math.ceil(imgW/2),
? ? ? ? halfImgH = Math.ceil(imgH/2);
? ? //計算中心圖片的位置點
? ? this.Constent.centerPos = {
? ? ? left:halfStageW-halfImgW,
? ? ? top:halfStageH-halfImgH
? ? }
? ? //計算左側,右側區(qū)域圖片排布位置點取值范圍
? ? this.Constent.hPosRange.leftSecX[0] = -halfImgW;
? ? this.Constent.hPosRange.leftSecX[1] = halfStageW - halfImgW*3;
? ? this.Constent.hPosRange.rightSecX[0] = halfStageW - halfImgW;
? ? this.Constent.hPosRange.rightSecX[1] = stageW - halfImgW;
? ? this.Constent.hPosRange.y[0] = -halfImgH;
? ? this.Constent.hPosRange.y[1] = stageH - halfImgH;
? ? //計算上側區(qū)域圖片位置點取值范圍
? ? this.Constent.vPosRange.topY[0] = -halfImgH;
? ? this.Constent.vPosRange.topY[1] = halfStageH - halfImgH*3;
? ? this.Constent.vPosRange.x[0] = halfImgW - imgW;
? ? this.Constent.vPosRange.x[1] = halfImgW;
? ? this._rearrang(0);
}
/**
?* 重新布局所有圖片
?* param centerIndex 指定居中排布哪個圖片
?*/
_rearrang(centerIndex){
? let imgsArrangeArr = this.imgsArrangeArr,
? ? ? Constent = this.Constent,
? ? ? hPosRange = Constent.hPosRange,
? ? ? vPosRange = Constent.vPosRange,
? ? ? hPosRangeLeftSecX = hPosRange.leftSecX,
? ? ? hPosRangeRightSecX = hPosRange.rightSecX,
? ? ? hPosRangeY = hPosRange.y,
? ? ? vPosRangeX = vPosRange.x,
? ? ? vPosRangeTopY = vPosRange.topY,
? ? ? imgsArrangeTopY = [],
? ? ? topImgNum = Math.ceil(Math.random() * 2),//取一個或者不取
? ? ? topImgSpliceIndex = 0,
? ? ? imgsArrangeCenterArr = imgsArrangeArr.splice(centerIndex,1);
? ? ? //首先居中 centerIndex 的圖片
? ? ? imgsArrangeCenterArr[0].pos = centerPos;
? ? ? //取出要布局上側的圖片的狀態(tài)信息
? ? ? topImgSpliceIndex = Math.ceil(Math.random() * (imgsArrangeArr.length - topImgNum));
? ? ? imgsArrangeTopArr = imgsArrangeArr.splice(topImgSpliceIndex,topImgNum);
? ? ? //布局位于上側的圖片
? ? ? imgsArrangeTopArr.forEach((value,index) => {
? ? ? ? imgsArrangeTopArr[index].pos = {
? ? ? ? ? top:getRangeRandom(vPosRangeTopY[0],vPosRangeTopY[1]),
? ? ? ? ? left:getRangeRandom(vPosRangeX[0],vPosRangeX[1])
? ? ? ? }
? ? ? });
? ? ? //布局左右兩側的圖片
? ? ? for(let i=0,j=imgsArrangeArr.length,k=j/2;i<j;i++){
? ? ? ? let hPosRangeLORX = null;
? ? ? ? //前半部分布局左邊 后半部分布局右邊
? ? ? ? if(i<k){
? ? ? ? ? hPosRangeLORX = hPosRangeLeftSecX;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? hPosRangeLORX = hPosRangeRightSecX;
? ? ? ? }
? ? ? ? imgsArrangeArr[i].pos = {
? ? ? ? ? top:getRangeRandom(hPosRangeY[0],hPosRangeY[1]),
? ? ? ? ? left:getRangeRandom(hPosRangeLORX[0],hPosRangeLORX[1])
? ? ? ? };
? ? ? }
? ? if(imgsArrangeTopArr && imgsArrangeTopArr[0]){
? ? ? imgsArrangeArr.splice(topImgSpliceIndex,0,imgsArrangeTopArr[0]);
? ? }
? ? imgsArrangeArr.splice(centerIndex,0,imgsArrangeCenterArr[0]);
? ? this.imgsArrangeArr = imgsArrangeArr;
}
? render() {
? ? let controllerUnits = [],
? ? ? ? imgFigures = [];
? ? imageDatas.forEach((value,i) => {
? ? ? //如果狀態(tài)信息不存在則初始化
? ? ? if(!this.imgsArrangeArr[i]){
? ? ? ? this.imgsArrangeArr[i] = {
? ? ? ? ? pos:{
? ? ? ? ? ? left:'0',
? ? ? ? ? ? top:'0'
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? ? imgFigures.push(<ImgFigure key={i} data={value} ref={"imgFigure"+i} arrange={this.imgsArrangeArr[i]} />);
? ? });
? ? return (
? ? ? <section className="stage" ref="stage">
? ? ? ? <section className="img-sec">
? ? ? ? ? {imgFigures}
? ? ? ? </section>
? ? ? ? <nav className="control-nav">
? ? ? ? ? {controllerUnits}
? ? ? ? </nav>
? ? ? </section>
? ? );
? }
}
AppComponent.defaultProps = {
};
export default AppComponent;
{left: "0", top: "0"}? 打印出來都是0? 不知道哪里出錯了 沒報錯呀?
2022-04-02
【蜘蛛俠TG@abin789】-7600
【蜘蛛俠TG@abin789】-7601
【蜘蛛俠TG@abin789】-7602
【蜘蛛俠TG@abin789】-7603
【蜘蛛俠TG@abin789】-7604
【蜘蛛俠TG@abin789】-7605
【蜘蛛俠TG@abin789】-7606
【蜘蛛俠TG@abin789】-7607
【蜘蛛俠TG@abin789】-7608
【蜘蛛俠TG@abin789】-7609
【蜘蛛俠TG@abin789】-7610
【蜘蛛俠TG@abin789】-7611
【蜘蛛俠TG@abin789】-7612
【蜘蛛俠TG@abin789】-7613
【蜘蛛俠TG@abin789】-7614
【蜘蛛俠TG@abin789】-7615
【蜘蛛俠TG@abin789】-7616
【蜘蛛俠TG@abin789】-7617
【蜘蛛俠TG@abin789】-7618
【蜘蛛俠TG@abin789】-7619
【蜘蛛俠TG@abin789】-7620
【蜘蛛俠TG@abin789】-7621
【蜘蛛俠TG@abin789】-7622
【蜘蛛俠TG@abin789】-7623
【蜘蛛俠TG@abin789】-7624
【蜘蛛俠TG@abin789】-7625
【蜘蛛俠TG@abin789】-7626
【蜘蛛俠TG@abin789】-7627
【蜘蛛俠TG@abin789】-7628
【蜘蛛俠TG@abin789】-7629
【蜘蛛俠TG@abin789】-7630
【蜘蛛俠TG@abin789】-7631
【蜘蛛俠TG@abin789】-7632
【蜘蛛俠TG@abin789】-7633
【蜘蛛俠TG@abin789】-7634
【蜘蛛俠TG@abin789】-7635
【蜘蛛俠TG@abin789】-7636
【蜘蛛俠TG@abin789】-7637
【蜘蛛俠TG@abin789】-7638
【蜘蛛俠TG@abin789】-7639
【蜘蛛俠TG@abin789】-7640
【蜘蛛俠TG@abin789】-7641
【蜘蛛俠TG@abin789】-7642
【蜘蛛俠TG@abin789】-7643
【蜘蛛俠TG@abin789】-7644
【蜘蛛俠TG@abin789】-7645
【蜘蛛俠TG@abin789】-7646
【蜘蛛俠TG@abin789】-7647
【蜘蛛俠TG@abin789】-7648
【蜘蛛俠TG@abin789】-7649
【蜘蛛俠TG@abin789】-7650
【蜘蛛俠TG@abin789】-7651
【蜘蛛俠TG@abin789】-7652
【蜘蛛俠TG@abin789】-7653
【蜘蛛俠TG@abin789】-7654
【蜘蛛俠TG@abin789】-7655
【蜘蛛俠TG@abin789】-7656
【蜘蛛俠TG@abin789】-7657
【蜘蛛俠TG@abin789】-7658
【蜘蛛俠TG@abin789】-7659
【蜘蛛俠TG@abin789】-7660
【蜘蛛俠TG@abin789】-7661
【蜘蛛俠TG@abin789】-7662
【蜘蛛俠TG@abin789】-7663
【蜘蛛俠TG@abin789】-7664
【蜘蛛俠TG@abin789】-7665
【蜘蛛俠TG@abin789】-7666
【蜘蛛俠TG@abin789】-7667
【蜘蛛俠TG@abin789】-7668
【蜘蛛俠TG@abin789】-7669
【蜘蛛俠TG@abin789】-7670
【蜘蛛俠TG@abin789】-7671
【蜘蛛俠TG@abin789】-7672
【蜘蛛俠TG@abin789】-7673
【蜘蛛俠TG@abin789】-7674
【蜘蛛俠TG@abin789】-7675
【蜘蛛俠TG@abin789】-7676
【蜘蛛俠TG@abin789】-7677
【蜘蛛俠TG@abin789】-7678
【蜘蛛俠TG@abin789】-7679
【蜘蛛俠TG@abin789】-7680
【蜘蛛俠TG@abin789】-7681
【蜘蛛俠TG@abin789】-7682
【蜘蛛俠TG@abin789】-7683
【蜘蛛俠TG@abin789】-7684
【蜘蛛俠TG@abin789】-7685
【蜘蛛俠TG@abin789】-7686
【蜘蛛俠TG@abin789】-7687
【蜘蛛俠TG@abin789】-7688
【蜘蛛俠TG@abin789】-7689
【蜘蛛俠TG@abin789】-7690
【蜘蛛俠TG@abin789】-7691
【蜘蛛俠TG@abin789】-7692
【蜘蛛俠TG@abin789】-7693
【蜘蛛俠TG@abin789】-7694
【蜘蛛俠TG@abin789】-7695
【蜘蛛俠TG@abin789】-7696
【蜘蛛俠TG@abin789】-7697
【蜘蛛俠TG@abin789】-7698
【蜘蛛俠TG@abin789】-7699
【蜘蛛俠TG@abin789】-7700
【蜘蛛俠TG@abin789】-7701
【蜘蛛俠TG@abin789】-7702
【蜘蛛俠TG@abin789】-7703
【蜘蛛俠TG@abin789】-7704
【蜘蛛俠TG@abin789】-7705
【蜘蛛俠TG@abin789】-7706
【蜘蛛俠TG@abin789】-7707
【蜘蛛俠TG@abin789】-7708
【蜘蛛俠TG@abin789】-7709
【蜘蛛俠TG@abin789】-7710
【蜘蛛俠TG@abin789】-7711
【蜘蛛俠TG@abin789】-7712
【蜘蛛俠TG@abin789】-7713
【蜘蛛俠TG@abin789】-7714
【蜘蛛俠TG@abin789】-7715
【蜘蛛俠TG@abin789】-7716
【蜘蛛俠TG@abin789】-7717
【蜘蛛俠TG@abin789】-7718
【蜘蛛俠TG@abin789】-7719
【蜘蛛俠TG@abin789】-7720
【蜘蛛俠TG@abin789】-7721
【蜘蛛俠TG@abin789】-7722
【蜘蛛俠TG@abin789】-7723
【蜘蛛俠TG@abin789】-7724
【蜘蛛俠TG@abin789】-7725
【蜘蛛俠TG@abin789】-7726
【蜘蛛俠TG@abin789】-7727
【蜘蛛俠TG@abin789】-7728
【蜘蛛俠TG@abin789】-7729
【蜘蛛俠TG@abin789】-7730
【蜘蛛俠TG@abin789】-7731
【蜘蛛俠TG@abin789】-7732
【蜘蛛俠TG@abin789】-7733
【蜘蛛俠TG@abin789】-7734
【蜘蛛俠TG@abin789】-7735
【蜘蛛俠TG@abin789】-7736
【蜘蛛俠TG@abin789】-7737
【蜘蛛俠TG@abin789】-7738
【蜘蛛俠TG@abin789】-7739
【蜘蛛俠TG@abin789】-7740
【蜘蛛俠TG@abin789】-7741
【蜘蛛俠TG@abin789】-7742
【蜘蛛俠TG@abin789】-7743
【蜘蛛俠TG@abin789】-7744
【蜘蛛俠TG@abin789】-7745
【蜘蛛俠TG@abin789】-7746
【蜘蛛俠TG@abin789】-7747
【蜘蛛俠TG@abin789】-7748
【蜘蛛俠TG@abin789】-7749
【蜘蛛俠TG@abin789】-7750
【蜘蛛俠TG@abin789】-7751
【蜘蛛俠TG@abin789】-7752
【蜘蛛俠TG@abin789】-7753
【蜘蛛俠TG@abin789】-7754
【蜘蛛俠TG@abin789】-7755
【蜘蛛俠TG@abin789】-7756
【蜘蛛俠TG@abin789】-7757
【蜘蛛俠TG@abin789】-7758
【蜘蛛俠TG@abin789】-7759
【蜘蛛俠TG@abin789】-7760
【蜘蛛俠TG@abin789】-7761
【蜘蛛俠TG@abin789】-7762
【蜘蛛俠TG@abin789】-7763
【蜘蛛俠TG@abin789】-7764
【蜘蛛俠TG@abin789】-7765
【蜘蛛俠TG@abin789】-7766
【蜘蛛俠TG@abin789】-7767
【蜘蛛俠TG@abin789】-7768
【蜘蛛俠TG@abin789】-7769
【蜘蛛俠TG@abin789】-7770
【蜘蛛俠TG@abin789】-7771
【蜘蛛俠TG@abin789】-7772
【蜘蛛俠TG@abin789】-7773
【蜘蛛俠TG@abin789】-7774
【蜘蛛俠TG@abin789】-7775
【蜘蛛俠TG@abin789】-7776
【蜘蛛俠TG@abin789】-7777
【蜘蛛俠TG@abin789】-7778
【蜘蛛俠TG@abin789】-7779
【蜘蛛俠TG@abin789】-7780
【蜘蛛俠TG@abin789】-7781
【蜘蛛俠TG@abin789】-7782
【蜘蛛俠TG@abin789】-7783
【蜘蛛俠TG@abin789】-7784
【蜘蛛俠TG@abin789】-7785
【蜘蛛俠TG@abin789】-7786
【蜘蛛俠TG@abin789】-7787
【蜘蛛俠TG@abin789】-7788
【蜘蛛俠TG@abin789】-7789
【蜘蛛俠TG@abin789】-7790
【蜘蛛俠TG@abin789】-7791
【蜘蛛俠TG@abin789】-7792
【蜘蛛俠TG@abin789】-7793
【蜘蛛俠TG@abin789】-7794
【蜘蛛俠TG@abin789】-7795
【蜘蛛俠TG@abin789】-7796
【蜘蛛俠TG@abin789】-7797
【蜘蛛俠TG@abin789】-7798
【蜘蛛俠TG@abin789】-7799