中间的旋转木马

首先在首页组件中,导入旋转木马子组件,并使用子组件:

书写代码的逻辑:

- 布局:1个大盒子,定义数据(1个数组嵌套了6个对象),在大盒子中遍历渲染6个小盒子

- 修饰样式:定义了3个动画,并将动画给小盒子做修饰

- 通过ref获取父标签,用父标签的children获取到所有的子标签循环给每个子标签设置动画的延迟

- 给每个子标签绑定鼠标移入事件

  // 事件函数
  const onmouseenter = (id) => {
      // 让动画停止
      for (let a = 0; a < carouselBox.current.children.length; a++) {
          carouselBox.current.children[a].style['animation-play-state'] = `paused`
      }
      // 让当前这个变 hov 图片 ==> 知道这是哪一个要变
      // console.log(222, id);
      // 根据id找到对应的这个数据
      let carouselData = data.find(item => item.id === id)
      // 修改这个数据的active
      carouselData.active = !carouselData.active
      // 重新设置data数据
      setData([...data])
      // console.log(333, data);
  }

- 模拟移入事件设置移出事件和点击事件

  const onmouseleave = (id) => {
      // 让动画停止
      for (let a = 0; a < carouselBox.current.children.length; a++) {
          carouselBox.current.children[a].style['animation-play-state'] = `running`
      }
      // 让当前这个变 hov 图片 ==> 知道这是哪一个要变
      // console.log(222, id);
      // 根据id找到对应的这个数据
      let carouselData = data.find(item => item.id === id)
      // 修改这个数据的active
      carouselData.active = !carouselData.active
      // 重新设置data数据
      setData([...data])
      // console.log(333, data);
  }
  const onclick = (id) => {
      let carouselData = data.find(item => item.id === id)
      alert(carouselData.text)
  }

setData如果修改数据的时候,只是修改了深层次的数据,页面是不会渲染的,因为没有监听到深层次的数据变化,所以为了能重新渲染页面,修改数据的时候,需要将数据外层的内存地址也做修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值