首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >悬停时仅显示与菜单相关的元素

悬停时仅显示与菜单相关的元素
EN

Stack Overflow用户
提问于 2020-05-20 15:09:11
回答 1查看 96关注 0票数 1

在我的React项目中,我有一个带有两个主要列表/导航项目的菜单,并希望在悬停时显示一个元素,并且当用户悬停在子菜单上时也保持可见。我可以使用css hover和设置一个状态的基于className的boolean来实现这一点。

问题是,当用户将鼠标悬停在子菜单上时,如何显示与该菜单相关的元素?现在,当子菜单悬停时,这两个元素都会显示。我使用.map来填充菜单和子菜单项,所以我想知道是否有一个属性可以控制这一点?

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { useState } from "react";
import styles from "./nav.module.scss";
import "../../styles/main.scss";

const Nav = ({
  navItems = [
    {
      id: "",
      label: "",
      subMenu: [{}]
    }
  ]
}) => {
  const [ballColor, setBallColor] = useState();
  const [showBall, setShowBall] = useState(false);

  const handleHover = () => {
    setShowBall(!showBall);
  };

  return (
    <>
      <nav>
        {/* Start of Menu Items */}
        <div className={styles.menuItemsContainer}>
          <ul className={styles.navUl}>
            {navItems.map(item => (
              <li key={item.id}>
                <a href="https://www.google.com">
                  <div
                    className={
                      showBall
                        ? `${styles.ball} ${styles.showBall} ${
                            styles[ballColor]
                          }`
                        : `${styles.ball} ${styles[ballColor]}`
                    }
                  />
                  {item.label}
                </a>
                <ul
                  className={
                    item.subMenu.length === 0
                      ? `${styles.noDisplay}`
                      : `${styles.display}`
                  }
                  onMouseEnter={handleHover}
                  onMouseLeave={handleHover}
                >
                  {item.subMenu.map(subItem => (
                    <li
                      key={subItem.id}
                      className={styles[subItem.class]}
                      onMouseOver={() => {
                        setBallColor(subItem.ballColor);
                      }}
                      onMouseLeave={() => setBallColor(null)}
                    >
                      {subItem.item}
                    </li>
                  ))}
                </ul>
              </li>
            ))}
          </ul>
        </div>
        {/* End of Menu Items */}
      </nav>
    </>
  );
};

export default Nav;

有关参考,请参阅sandbox

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 15:40:32

您需要的是一个颜色数组:每个主菜单对应一种颜色。

下面的代码是实现它的一种方法,我不喜欢循环中的所有这些循环,所以它只是一种向你展示如何处理它的方法,但可能不是最好的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { useState } from "react";
import styles from "./nav.module.scss";
import "../../styles/main.scss";

const Nav = ({
  navItems = [
    {
      id: "",
      label: "",
      subMenu: [{}]
    }
  ]
}) => {
  const [ballColors, setBallColor] = useState(["#fff", "#fff"]);
  const [showBalls, setShowBall] = useState([false, false]);

  const handleHover = i => {
    setShowBall([...showBalls].map((bool, j) => (i === j ? !bool : bool)));
  };

  return (
    <>
      <nav>
        {/* Start of Menu Items */}
        <div className={styles.menuItemsContainer}>
          <ul className={styles.navUl}>
            {navItems.map((item, i) => (
              <li key={item.id}>
                <a href="https://www.google.com">
                  <div
                    className={
                      showBalls[i]
                        ? `${styles.ball} ${styles.showBall} ${
                            styles[ballColors[i]]
                          }`
                        : `${styles.ball} ${styles[ballColors[i]]}`
                    }
                  />
                  {item.label}
                </a>
                <ul
                  className={
                    item.subMenu.length === 0
                      ? `${styles.noDisplay}`
                      : `${styles.display}`
                  }
                  onMouseEnter={() => handleHover(i)}
                  onMouseLeave={() => handleHover(i)}
                >
                  {item.subMenu.map((subItem, j) => (
                    <li
                      key={subItem.id}
                      className={styles[subItem.class]}
                      onMouseOver={() => {
                        setBallColor(
                          [...ballColors].map((color, k) =>
                            i === k ? subItem.ballColor : color
                          )
                        );
                      }}
                      onMouseLeave={() =>
                        setBallColor(
                          [...ballColors].map((color, k) =>
                            i === k ? "#fff" : color
                          ),
                          i
                        )
                      }
                    >
                      {subItem.item}
                    </li>
                  ))}
                </ul>
              </li>
            ))}
          </ul>
        </div>
        {/* End of Menu Items */}
      </nav>
      ballColors: {ballColors.join(" ")}
    </>
  );
};

export default Nav;

这里是a fork of your codepen作为该解决方案的演示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61916532

复制
相关文章
Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现
Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现 By:授客 开发环境 win10 element-ui "2.13.1" vue "2.6.10" 需求描述 如下,鼠标移动到左侧标签
授客
2020/06/23
3.7K0
CSS 3.0实现的悬停菜单特效
今天给大家分享一个用CSS 3.0实现的悬停菜单特效,效果如下: 以下是代码实现,欢迎大家复制粘贴和收藏。 <!DOCTYPE html> <html lang="en"> <head> <
越陌度阡
2020/11/26
1.2K0
CSS 3.0实现的悬停菜单特效
元素的显示与隐藏
在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。
星辰_大海
2020/09/30
4.4K0
Web前端鼠标悬停实现显示与隐藏效果
css定义,偏移量,相对定位,绝对定位 显示与隐藏 二维码相对于微信图标定位 鼠标悬停微信图标上显示 鼠标离开微信图标时隐藏 什么是定位,就是定义网页标签在运行时显示的位置 css提供Position属性用于指定元素在网页中定位的方式 background-position: 设置背景图片的显示位置
达达前端
2019/07/28
4K0
OneCode实战——自定义悬停动画菜单
基于模型驱动的低代码平台,将数据模型与展现模型做了有机的整合大幅降低了开发者的工作量。使程序员可以从繁重的业务编程和UI展现等技术细节上脱离出来。但在具体的项目当中,客户对于展现界面都会有自身独特的展示展现风格。特别是类似于门户主页、功能菜单框架等方面基本上都是定制应用方案。针对于类似的需求在低代码领域中也是一个应用难点,但也不乏优秀的低代码引擎在“全栈”支持上提供了很不错的解决方案。今天我们就选取了一个典型的例子,如何利用OneCode低代码引擎构建自定义应用。
onecode
2023/10/24
4590
OneCode实战——自定义悬停动画菜单
鼠标悬停下划线显示特效,html鼠标悬停显示下划线
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145981.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/28
2.1K0
纯css实现图片悬停时显示渐变圆形信息浮层效果
实现这个主要是使用css布局中的相对定位与绝对定位,以及结合元素样式的opacity透明度实现
itclanCoder
2023/09/14
2120
纯css实现图片悬停时显示渐变圆形信息浮层效果
unity3d:悬停显示
立羽
2023/08/24
3030
隐藏菜单显示
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>CodePen - Menu Button Interaction</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> <link rel="stylesheet" href="./
拿我格子衫来
2022/01/24
3.1K0
隐藏菜单显示
CSS 鼠标悬停图片,显示隐藏文本
我在 JavaScript 鼠标悬停图片,显示隐藏文本 这篇博文当中实现了同样的效果,只不过是通过 JS 来实现的,但其实,通过 CSS 动画也能实现同样的效果,直接看代码吧
Nian糕
2018/08/21
8.6K1
CSS 鼠标悬停图片,显示隐藏文本
元素隐藏与显示属性及操作方式
浏览器对其渲染可是不可见,它在网页中占位置却不可点击,也就是说明元素不可见却仍然占据空间。
岳泽以
2022/10/26
1.6K0
元素隐藏与显示属性及操作方式
实现Bootstrap导航鼠标悬停下拉菜单及下拉主菜单可点击效果
Bootstrap是一个非常不错的前端框架,但是在实际的使用过程中还需要根据实际的需要再微调整,比如我们默认使用Bootstrap框架下拉菜单的时候主导航是无法点击打开页面的,以及下拉展开需要单击主菜单,如果我们需要实现主菜单可以点击打开,而且下拉菜单实现悬停下拉的效果则需要进行调整JS脚本。
老蒋
2021/12/27
3.8K0
在Mockplus中,如何做鼠标悬停时菜单下拉的效果?
了解Mockplus的用户会知道,该原型工具目前并不直接支持鼠标悬停功能。但我经过尝试,发现想用它实现一个鼠标悬停事件并不是什么难事,比如网页设计中很常见的鼠标悬停时菜单下拉的效果,只要换个思路,利用Mockplus的状态交互功能,就能轻松实现。 我们来看看详细步骤: 第一步:用矩形做一个菜单。 打开Mockplus,从界面左侧的组件库中拖出一个矩形,将其复制成多个。其中一个作为菜单的显示区域(图中蓝色矩形),另外几个拼接起来作为菜单的内容。 在右侧参数面板中,将第一个矩形设置为不可见。然后将另外
奔跑的小鹿
2018/03/16
2.5K0
在Mockplus中,如何做鼠标悬停时菜单下拉的效果?
JavaScript 鼠标悬停图片,显示隐藏文本
当我们在浏览网页的时候,描述性的文本通常不会跟在图片之后,而是当我们将鼠标移至图片上时,才会将文本显示出来,这样的好处是,以突显图片为主,并节省布局空间
Nian糕
2018/08/21
4.1K0
JavaScript 鼠标悬停图片,显示隐藏文本
显示不全的菜单左右移动
<div class="nav-box" style="height:50px;"> <div class="nav inner"> <a class="prev">left</a> <div class="picScroll"> <ul> <li> <a href="#">菜单1</a> </li> <li>
tianyawhl
2021/12/20
1.6K0
排查右键菜单不显示/显示慢问题
当我们右键资源管理器/浏览器的时候,会弹出菜单。你有没遇到过右键时不会弹出菜单或菜单弹出很慢?特别是安装一些软件后某一天发现了该问题,但又不知道是哪款软件所致。笔者最近遇到该问题,用网上的查看/修改注册表等方式未解决,最后使用ShellExView工具解决了。接下来将给大家介绍如何使用ShellExView工具排查/修复。
gaigai
2021/02/04
1.3K0
jquery easyui菜单树显示
目前做了一个easyui项目需要显示多级菜单,菜单配置到数据库中,因此每级菜单都需要到数据库中取,用了jQuery EasyUI方便多了。
全栈程序员站长
2022/07/15
3.4K0
Boot Manager菜单的显示语言设置
我的系统原来是Windows Vista中文版,最近又以双系统的方式安装了Windows 7 RC 英文版。这样原来的启动的操作系统的选择菜单、F8高级启动菜单、Windows的内存诊断工具菜单都变成了英文。
williamwong
2018/07/24
1.8K0
皮肤引擎(HTMLayout)特性说明文档
此界面引擎基于 HTMLayout 开发, 关于 HTMLayout 的更多信息请访问以下网站:
用户2135432
2023/10/18
3470
【CSS】元素的显示与隐藏 display visibility overflow 属性区别
display:none 此元素不会被显示。 display:block 此元素将显示为块级元素,此元素前后会带有换行符。
梦溪
2021/08/19
2.4K0

相似问题

悬停时显示菜单仅适用于iPad

11

如何在鼠标悬停数组元素时显示与该元素相关的图像

10

在悬停元素时显示/隐藏级联菜单

43

仅使用css在菜单上悬停时显示div。

11

CSS下拉菜单-悬停<li>元素时不显示菜单。

116
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文