实现点击Button,改变背景颜色(多个按钮互斥显示)

一 功能描述

        在界面中,有一组button,现在需要实现下面功能:点击其中一个,改变被点击button的背景颜色。当点击下一个之后,之前点击过的按钮背景颜色还原,当前被点击的button背景色又被改变。效果如下图:

        当点击了test1,test1的背景色变为了红色。再继续点击test2,test2的背景色变为了红色,而test1的背景色还原。

                

二 功能实现(以React代码为例,其他框架逻辑类似)

1. 方式一:使用 className和动态的onClick事件。

import {Button, Space} from "antd";
import React, {useEffect} from "react";const ButtonClick = () => {const changeColorMethod = () => {let but = document.getElementsByClassName("buttonColor");for (let i = 0; i < but.length; i++) {but[i].onclick = function () {for (var i = 0; i < but.length; i++) {but[i].style.backgroundColor = '';}this.style.backgroundColor = 'red';}}}useEffect(() => {changeColorMethod()}, []);return <div><Space><Button className={`buttonColor`}>test1</Button><Button className={`buttonColor`}>test2</Button><Button className={`buttonColor`}>test3</Button></Space></div>
};export default ButtonClick;

2. 方式二:使用 className和手动添加的onClick事件。

import {Button, Space} from "antd";
import React from "react";const ButtonClick = () => {const changeColorMethod = (e) => {let button = document.getElementsByClassName("buttonColor");for (let i = 0; i < button.length; i++) {button[i].style.backgroundColor = '';}e.currentTarget.style.backgroundColor = "red";}return <div><Space><Button className={`buttonColor`} onClick={changeColorMethod}>test1</Button><Button className={`buttonColor`} onClick={changeColorMethod}>test2</Button><Button className={`buttonColor`} onClick={changeColorMethod}>test3</Button></Space></div>
};export default ButtonClick;

3. 方式三:使用useState、button的id和onClick事件。

import {Button, Space} from "antd";
import React, {useState} from "react";const ButtonClick = () => {const [lastNode, setLastNode] = useState("");// 使用idconst changeColorMethod = (e) => {// 还原上一个if (lastNode) {const oldNodeInfo = document.getElementById(lastNode);if (oldNodeInfo) {oldNodeInfo.style.backgroundColor = '';}}const currentId = e.currentTarget.id;const newNodeInfo = document.getElementById(currentId);if (newNodeInfo) {newNodeInfo.style.backgroundColor = 'red';}setLastNode(currentId)}return <div><Space><Button id={"test1"} onClick={changeColorMethod}>test1</Button><Button id={"test2"} onClick={changeColorMethod}>test2</Button><Button id={"test3"} onClick={changeColorMethod}>test3</Button></Space></div>
};export default ButtonClick;

三 备注和延申

        背景颜色还原的时候一定要写”空字符串“ 。

        backgroundColor的值如果写成了 white 或者 transparent ,那么。button的hover事件中设置【backgroundColor】的功能就对已点击过的button 无效。

        如果在这种情况下,非要实现hover中的backgroundColor功能,那么就给 backgroundColor 颜色添加  !important 属性 。

        但是这样便会出现一个问题:加上了 !important ,那么被点击后的button也会出现 hover 效果,这样就不太符合功能设定(按理说,被点击后的button不管怎样,都会保持点击时候的颜色,即使 hover ,也不会变色)。 

        因此,为了不要出现这个问题,就一定注意,重设背景颜色,一定要写成【空字符串】

        以上也得出,想要 hover事件的背景颜色 效果 覆盖点击时候的背景颜色,给 hover 中的backgroundColor 属性加上  !important 即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】多线程代码案例(2)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程代码案例(1)&a…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节&#xff0c;“女性”话题都会被郑重地讨论。 从消费市场上来说&#xff0c;最近几年女性群体正在拥有越来越大的影响力&#xff0c;甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问&#xff0c;女性消费群体的崛起已经成为…

监控平台—Zabbix对接grafana

目录 一、安装grafana并启动 二.浏览器访问 三、导入zabbix数据&#xff0c;对接grafana 四.如何导入模版 一、安装grafana并启动 添加一台服务器192.168.80.102 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled cd /…

一文解开关于UWB定位技术的认识误区

作为一项新兴技术产业&#xff0c;UWB定位技术具有无限发展潜力。尤其是在TB行业应用中&#xff0c;UWB定位部分在项目的产值占比为10%-20%之间&#xff0c;这便意味着&#xff0c;UWB定位市场可以撬动其本身市场产值的5-10倍。 然而&#xff0c;伴随着UWB定位技术的迅速发展&a…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【通用密钥库基础概念】

通用密钥库基础概念 在使用通用密钥库完成应用开发前&#xff0c;开发者需要了解以下相关概念&#xff0c;以下概念将贯穿整个开发过程。 可信执行环境&#xff08;TEE&#xff09; 可信执行环境&#xff08;Trusted Execution Environment&#xff09;&#xff0c;简称TEE&…

论文解读StyleGAN系列——StyleGANv1

论文&#xff1a;A Style-Based Generator Architecture for Generative Adversarial Networks&#xff08;2018.12&#xff09; 作者&#xff1a;Tero Karras, Samuli Laine, Timo Aila 链接&#xff1a;https://arxiv.org/abs/1812.04948 代码&#xff1a;https://github.com…

Movable antenna 早期研究

原英文论文名字Historical Review of Fluid Antenna and Movable Antenna 最近&#xff0c;无线通信研究界对“流体天线”和“可移动天线”两种新兴天线技术的发展引起了极大的关注&#xff0c;这两种技术因其前所未有的灵活性和可重构性而极大地提高了无线应用中的系统性能。…

怎么把视频中走来走去的人去掉?

现在短视频火爆&#xff0c;很多朋友都会将生活中一些特定的场面拍摄记录下来。通过剪辑发布到一些短视频平台上&#xff0c;但是有时拍摄的视频不是那么完美&#xff0c;会拍到不相关的人或物&#xff0c;影响画面的主体&#xff0c;这种情况下我们可以去除视频中无关的走来走…

c++ primer plus 第15章友,异常和其他:友元类

c primer plus 第15章友&#xff0c;异常和其他&#xff1a;友元类 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;友元类 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的…

5个文章生成器免费版,自动写作文章更轻松

在这个信息如洪流般涌动的时代&#xff0c;写作所具有的重要性不言而喻。不管是学生需要完成的作业&#xff0c;还是职场人士得提交的报告&#xff0c;亦或是自媒体创作者必须输出的内容&#xff0c;都迫切要求我们具备一定的写作技能。然而&#xff0c;写作对很多人来说&#…

C++实现一个简单的Qt信号槽机制(1)

昨天写这个文章《深入探讨C的高级反射机制&#xff08;2&#xff09;&#xff1a;写个能用的反射库》的时候就在想&#xff0c;是不是也能在这套反射逻辑的基础上&#xff0c;实现一个类似Qt的信号槽机制&#xff1f; Qt信号槽机制简介 所谓的Qt的信号槽&#xff08;Signals …

隐私集合求交(PSI)原理深入浅出

隐私集合求交技术是多方安全计算领域的一个子问题&#xff0c;通常也被称为安全求交、隐私保护集合交集或者隐私交集技术等&#xff0c;其目的是允许持有各自数据集的双方或者多方&#xff0c;执行两方或者多方集合的交集计算&#xff0c;当PSI执行完成&#xff0c;一方或者两方…

@amap/amap-jsapi-loader实现高德地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度

1.第一步要加入项目package.json中或者直接yarn install它都可以 想必大家应该都会 "amap/amap-jsapi-loader": "0.0.7"2.加入项目中 关于接口获取key的接口 大家改成自己对应的项目请求方法 import React, { PureComponent } from react; import { Input…

【前端--Vue】组件之间的多种通信方式,一文彻底搞懂组件通信!

本篇将重点讲解vue中的多种组件通信方式&#xff0c;包括【父传子】【子传父】【兄弟组件通信】【依赖注入】等等&#xff0c;并提供具体案例来让小伙伴们加深理解、彻底掌握&#xff01;喜欢的小伙伴们点赞收藏&#xff0c;持续关注哦~&#x1f495; &#x1f49f; 上一篇文章…

商务视频推广打造有吸引力的7个秘诀-华媒舍

商务视频推广是现代企业发展的重要工具&#xff0c;它能够帮助企业吸引更多的目标客户&#xff0c;提升品牌知名度&#xff0c;增加销售量。但是&#xff0c;如何打造一部有吸引力的商务视频推广呢&#xff1f;本文将为您介绍7个秘诀&#xff0c;帮助您在商务视频推广中取得成功…

性能测试-JMeter学习

1、给不同的访问口分配访问占比&#xff1b;例&#xff1a;登录30%&#xff0c;首页&#xff1a;20%&#xff0c;新增&#xff1a;50% 不同业务放到不同线程组里&#xff0c;实现不同业务的分配 使用吞吐量控制器&#xff0c;设置不同的占比 使用if控制器&#xff0c;设置不同…

单服务器推送还在用WebSocket?快试试更快的SSE

在传统的Web开发中&#xff0c;WebSocket常被用来实现实时双向通信。然而&#xff0c;对于只需要单向、从服务器到客户端的信息推送场景&#xff0c;Server-Sent Events (SSE) 提供了一种更轻量、更简单的解决方案。 SSE 和 WebSocket 特点的差异 SSE SSE 适用于服务器向客户…

恭喜!H医生一个月内荣获美国芝加哥大学访问学者邀请函

➡️【院校背景】 芝加哥大学&#xff08;英文&#xff1a;The University of Chicago&#xff0c;简称UChicago、“芝大”&#xff09;由石油大王约翰洛克菲勒于1890年创办&#xff0c;坐落于美国伊利诺伊州芝加哥市&#xff0c;一所私立研究型大学&#xff0c;属于全球大学校…

uboot run命令基本使用

run 命令可以用于运行环境变量的中定义的命令,run bootcmd 可以运行bootcmd中启动命令 作用:可以运行我们自定义的环境变量 include/command.h common/cli.c /*** board_run_command() - Fallback function to execute a command** When no command line features are enabled …

注意!高考志愿填报的两个优先原则,千万不要错过!

高考已经告一段落&#xff0c;接下来几天各省会陆续公布分数&#xff0c;然后就到了填报志愿的环节。高考志愿填报是一项影响深远的综合性决策&#xff0c;决定着每个考生的未来发展 。下面我谈谈我对高考填报的理解。我总结为&#xff1a;两个优先、三个因素。 一、两个优先 …