Ken428965 2022-09-15 18:37 采纳率: 53.4%
浏览 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条回答 默认 最新

  • 撸空投的菜鸟 2022-09-15 19:20
    关注

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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 51单片机使lcd显示器开机闪烁预设字符闪烁3次需要加什么代码
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题