为了账号安全,请及时绑定邮箱和手机立即绑定

this.imgsArrangeArr = imgsArrangeArr; 这个值好像没改变 谁能帮我解惑

require('normalize.css/normalize.css');

require('styles/App.scss');

import React from 'react';

//获取图片数据

let imageDatas = require('../data/imageDatas.json');

//利用自执行函数 把图片名转成图片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);

//获取区间内的一个随机值

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("执行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

    }

    //计算左侧,右侧区域图片排布位置点取值范围

    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;

    //计算上侧区域图片位置点取值范围

    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;

      //取出要布局上侧的图片的状态信息

      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) => {

      //如果状态信息不存在则初始化

      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  不知道哪里出错了 没报错呀 

正在回答

1 回答


【蜘蛛侠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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
React实战--打造画廊应用(上)
  • 参与学习       57309    人
  • 解答问题       273    个

颠覆式前端UI开发框架 React,打造图片画廊实践案讲解

进入课程

this.imgsArrangeArr = imgsArrangeArr; 这个值好像没改变 谁能帮我解惑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信