Ken428965 2022-09-15 18:37 采纳率: 53.9%
浏览 83
已结题

react,对四个盒子实现移动端手指按下效果,即手指按下其中一个盒子后将背景色变为灰色,手指松开后将背景色变回原来的白色,如何让手指按压事件的代码更简洁?

已写的代码如下:

import React, { useRef } from 'react';
import { Grid } from 'antd-mobile';
// import './style.css';
export default () => {
  // 获取元素节点
  let color1 = useRef();
  let color2 = useRef();
  let color3 = useRef();
  let color4 = useRef();
  // 触发点击事件改变样式
  function touchstart1() {
    color1.current.style.backgroundColor = 'gray';
  }
  function touchend1() {
    color1.current.style.backgroundColor = 'white';
  }
  function touchstart2() {
    color2.current.style.backgroundColor = 'gray';
  }
  function touchend2() {
    color2.current.style.backgroundColor = 'white';
  }
  function touchstart3() {
    color3.current.style.backgroundColor = 'gray';
  }
  function touchend3() {
    color3.current.style.backgroundColor = 'white';
  }
  function touchstart4() {
    color4.current.style.backgroundColor = 'gray';
  }
  function touchend4() {
    color4.current.style.backgroundColor = 'white';
  }
  return (
        <div className='grid'>
        <Grid columns={2} gap={4}>
          <Grid.Item>
            <div className='grid-demo-item-block' ref={color1} onTouchStart={() => { touchstart1() }} onTouchEnd={() => { touchend1() }}>
              <div className='g'>
                <p>家住琶洲</p>
                <span>前景可期</span>
              </div>
              <img src={require(`./1.jpg`)} alt='' />
            </div>
          </Grid.Item>
          <Grid.Item>
            <div className='grid-demo-item-block' ref={color2} onTouchStart={() => { touchstart2() }} onTouchEnd={() => { touchend2() }}>
            <div className='g'>
              <p>家住琶洲</p>
              <span>前景可期</span>
              </div>
              <img src={require(`./2.jpg`)} alt='' />
              </div>
          </Grid.Item>
          <Grid.Item>
            <div className='grid-demo-item-block' ref={color3} onTouchStart={() => { touchstart3() }} onTouchEnd={() => { touchend3() }}>
            <div className='g'>
              <p>家住琶洲</p>
              <span>前景可期</span>
              </div>
              <img src={require(`./3.jpg`)} alt='' />
              </div>
          </Grid.Item>
          <Grid.Item>
            <div className='grid-demo-item-block' ref={color4} onTouchStart={() => { touchstart4() }} onTouchEnd={() => { touchend4() }}>
            <div className='g'>
              <p>家住琶洲</p>
              <span>前景可期</span>
              </div>
              <img src={require(`./4.jpg`)} alt='' />
              </div>
          </Grid.Item>
        </Grid>
        </div>
    )
};

希望实现以下效果:对以下四个盒子其中一个盒子手指按压后,将该盒子的背景色变成灰色,手指松开后背景色变回白色

img

请问如何才能让以上关于四项手指按压事件的代码更简洁?

  • 写回答

3条回答 默认 最新

  • wan8140870 2022-09-15 19:20
    关注

    这么类似的代码,用过数组来map下就好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月20日
  • 已采纳回答 9月19日
  • 修改了问题 9月15日
  • 修改了问题 9月15日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效