使用 React.js 实现 SlideToggle 功能

2023-11-29

我想用我的下拉菜单完成以下任务。

1 - 单击时显示

2 - 第二次单击时隐藏它

3 - 单击外部任意位置时将其隐藏。

4 - 使用幻灯片效果完成所有这些

我已经覆盖了 1-3 个。我4号就被堵住了

如何创建幻灯片效果以及下面发生的以下单击事件?

我已经使用 jQuery 的 SlideToggle (此处未显示)进行了有效的概念验证...但是,我想学习如何以反应方式做到这一点。

如果您想查看完整的代码:反应下拉导航栏

// CASE 1 Show Hide on click, no slide effect yet  
class ServicesDropdown extends Component {
    constructor() {
        super();
        this.state = {
            dropdown: false
        };
    }

    handleClick = () => {
        if (!this.state.dropdown) {
            // attach/remove event handler
            document.addEventListener('click', this.handleOutsideClick, false);
        } else {
            document.removeEventListener('click', this.handleOutsideClick, false);
        }

        this.setState(prevState => ({
            dropdown: !prevState.dropdown,
        }));
    }

    handleOutsideClick = (e) => {
        // ignore clicks on the component itself
        if (this.node.contains(e.target)) {
            return;
        }
        this.handleClick();
    }

    render() {
        return (
            <li ref={node => { this.node = node; }}>
                <a href="#!" onClick={this.handleClick}>Services +</a>
                {this.state.dropdown && 
                (
                    <ul className="nav-dropdown" ref={node => { this.node = node; }}>
                    <li><a href="#!">Web Design</a></li>
                    <li><a href="#!">Web Development</a></li>
                    <li><a href="#!">Graphic Design</a></li>
                    </ul>

                )}
            </li>
        )
    }
}

前一段时间我想出了如何将滑动效果应用于React组件,但它不是exactly相同的行为,但您可能会发现我的代码和描述很有用。请参阅我对另一个相关问题的回答:https://stackoverflow.com/a/48743317/1216245 [编辑:此后已删除,所以我将说明粘贴在下面。]

博客文章在这里:http://blog.lunarlogic.io/2018/slidedown-menu-in-react/。随意窃取代码的任何部分。


以下是该解决方案最重要部分的简短描述。

至于 React/JSX 部分,您可以将要滑动的组件包装在 CSSTransitionGroup 中。 (您可以在此处阅读有关此 React 插件的更多信息:https://reactjs.org/docs/animation.html#high-level-api-reactcsstransitiongroup和这里:https://reactcommunity.org/react-transition-group/.)

<div className="component-container">
  <CSSTransitionGroup
    transitionName="slide"
    transitionEnterTimeout={300}
    transitionLeaveTimeout={300}
  >
    { this.state.showComponent && <Component /> }
  </CSSTransitionGroup>
</div>

请注意,它全部包装在一个容器中,您需要该容器才能使动画按您希望的方式工作。

这是我用于幻灯片动画效果的 CSS:

/*
  Slide animation styles.
  You may need to add vendor prefixes for transform depending on your desired browser support.
*/

.slide-enter {
  transform: translateY(-100%);
  transition: .3s cubic-bezier(0, 1, 0.5, 1);

  &.slide-enter-active {
    transform: translateY(0%);
  }
}

.slide-leave {
  transform: translateY(0%);
  transition: .3s ease-in-out;

  &.slide-leave-active {
    transform: translateY(-100%);
  }
}

/*
  CSS for the submenu container needed to adjust the behavior to our needs.
  Try commenting out this part to see how the animation looks without the container involved.
*/

.component-container {
  height: $component-height; // set to the width of your component or a higher approximation if it's not fixed
  min-width: $component-width; // set to the width of your component or a higher approximation if it's not fixed 
}

如需完整示例和演示,请查看http://blog.lunarlogic.io/2018/slidedown-menu-in-react/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 React.js 实现 SlideToggle 功能 的相关文章

随机推荐

  • SwiftUI:了解使用常量与 @Binding 初始值设定项时的 .sheet / .fullScreenCover 生命周期

    我试图了解如何以及何时调用 sheet 和 fullScreenCover 初始值设定项 下面是一个最小的可重现示例 其中第一个屏幕有 3 个彩色矩形 而 SecondView 通过 fullScreenCover 显示 有 1 个矩形 该
  • 如何将方法作为回调传递给 Windows API 调用(后续)?

    这篇文章是相关文章的后续question发布于此处Ran The 接受的答案坚持使用通常的普通旧功能 这段摘录特别引起我的注意 实例方法有一个额外的隐式参数 其中包含 实例引用 即 Self 坚信应该有一种方法来使用一种 参数 适配器 重新
  • 如何在onsenui中使用多个html文件

    在 OnsenUI 中 它说 您还可以在同一页面中定义页面内容 而不是在单独的文件中创建 index html 和 services html 我不喜欢将整个应用程序放在一个 html 文件中 因此我尝试将每个模板放入一个单独的文件中 这是
  • 迭代器和列表迭代器的区别?

    Iterator ite Set iterator Iterator ite List iterator ListIterator listite List listIterator 我们可以用Iterator遍历一个Set or a Li
  • Folium Choropleth Map 呈现灰色阴影而不是专题地图的真实颜色

    我遇到的问题是我的分区统计图无法正确渲染 我有大量芝加哥市的叫车数据 我想按人口普查区创建分区统计图 我查了一下key ongeojson 文件中的特征为 geoid10 并确保拾取人口普查区域全部匹配 我还确保geojson文件和data
  • 你什么时候会看到 Jquery 美元符号出现在某个名称的末尾

    你什么时候会看到 jQuery 美元符号出现在某些名称的末尾 例如plot or plot getName 当美元符号位于这样的名称末尾时 这意味着什么 就其本身而言 什么也没有 这 只是标识符中的另一个合法字符 仅此而已 无论您使用什么代
  • 如何使用OpenSSL解密Java AES加密数据?

    我正在连接到一个旧版 Java 应用程序 该应用程序无法更改 该应用程序使用 AES 加密数据 以下是原始 Java 代码实例化 AES 密码的方式 SecretKeySpec skeySpec new SecretKeySpec key
  • 从 dask 读取并行 excel 表

    您好 到目前为止我遇到的使用 dask 的所有示例都有 使用 dask read csv 读取文件夹中的多个 csv 文件 称呼 如果我提供了一个包含多个选项卡的 xlsx 文件 我可以使用任何内容吗 在DASK并行阅读它们 附 我正在使用
  • 如何在给定包中查找带注释的方法?

    我有一个简单的方法标记注释 类似于第 35 项中的第一个示例 有效的Java 第二版 Marker annotation for methods that are called from installer s validation scr
  • didOutputSampleBuffer 委托未调用

    我的代码中的 didOutputSampleBuffer 函数没有被调用 我不知道为什么会这样 这是代码 import UIKit import AVFoundation import Accelerate class ViewContro
  • 梯度大小的单位和限制是什么?

    图像梯度大小的单位和限制是什么 例如 我知道如何获取图像的梯度大小 见下文 以及由此产生的Mat将包含源图像中每个边缘的边缘强度 大小 但是 边缘强度 幅度 的单位是什么 梯度方向以度 弧度为单位 大小的单位是什么 OpenCV 中的 Ma
  • 为什么 spaCy 不像斯坦福 CoreNLP 那样在标记化过程中保留单词内连字符?

    SpaCy版本 2 0 11 Python版本 3 6 5 操作系统 Ubuntu 16 04 我的句子样本 Marketing Representative won t die in car accident or Out of box
  • webkit变换:如何在Z轴上旋转,但不绕中心旋转?

    知道如何让 webkit 变换旋转围绕与元素中心不同的点 例如围绕右上角 旋转吗 您可以使用transform origin来更改原点的位置 myClass webkit animation duration 1s webkit anima
  • AngularJS:包含和范围继承 = 绑定损坏?

    为了清理我的部分内容 我最近将一些全局菜单移动到单独的模板中 现在我将其包含在需要它们的视图中 由于菜单 包括搜索栏 是全局的 我创建了一个服务来跟踪菜单的状态等 问题是在我开始包含之后发生了一些有趣的事情 视图的 HTML Jade di
  • 使用 java -server 选项

    The Oracle 文档 says server 选择 Java HotSpot 服务器 VM 在支持 64 位的 jdk 上 仅 支持 Java HotSpot Server VM 因此 server 选项是隐式的 这可能会在未来版本中
  • 我可以同时在多个函数上使用await吗?

    我正在学习 python 中并发的魔力 并且我有一个一直在其中使用 wait 的脚本 通过 fastapi 的框架 我需要从数据库中获取多个数据并执行以下操作 DBresults1 await db conn fetch rows quer
  • 想要将 Rally 故事从一个项目复制到另一个项目

    我正在尝试将故事和任务 及其层次结构 从一个 Rally 项目复制到另一个项目 我只需要从一个 模板 项目进行复制 因此不需要使用 ProjectPicker 小部件 只需利用复制故事和任务的现有应用程序即可but它需要能够从一个项目读取数
  • 在 O(n) 时间内查找数组中的重复元素

    我在面试时被问到这个问题 我一直想知道正确的答案 您有一个从 0 到 n 1 的数字数组 其中一个数字被删除 并替换为数组中已有的数字 从而与该数字重复 我们怎样才能及时检测到这个重复项O n 例如 一个数组4 1 2 3会成为4 1 2
  • 无法从浏览器查看在 docker 容器中运行的 Rails 应用程序

    我正在 docker 容器中运行 Rails 应用程序 执行后docker compose up我在浏览器中查看并看到ERR CONNECTION REFUSED 我尝试过端口转发docker run p 3000 3000 docker
  • 使用 React.js 实现 SlideToggle 功能

    我想用我的下拉菜单完成以下任务 1 单击时显示 2 第二次单击时隐藏它 3 单击外部任意位置时将其隐藏 4 使用幻灯片效果完成所有这些 我已经覆盖了 1 3 个 我4号就被堵住了 如何创建幻灯片效果以及下面发生的以下单击事件 我已经使用 j