React实现可页面可调节

这篇具有很好参考价值的文章主要介绍了React实现可页面可调节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果预览

关键代码

    //调节窗口大小
    useEffect(() => {
        if (conref.current) {

            conref.current.style.width = `${conref.current.clientWidth + delta}px`
            let t = conref.current.clientWidth + conref.current.offsetLeft + 2
            start.current = t
        }
    }, [delta])


//dom结构
 <div
            onMouseMoveCapture={(e) => { if (moving) { setdelta(e.clientX - start.current) } }}
            onMouseUp={(e) => { moving && setmoving(false) }}
            className="commentManager_body">
            <div ref={conref} className="commentManager_articlelist">
                {
                    articles && articles.map(item => <NavLink to={`/articleManage/manageComments/${item.id}`}  key={item.id}>{item.title}</NavLink>)
                }
            </div>
            <div
                //移动端事件
                onTouchStart={(e) => { start.current = e.touches[0].clientX }}
                onTouchMove={(e) => { setdelta(() => e.touches[0].clientX - start.current) }}
                onMouseDown={(e) => { setmoving(true); start.current = e.clientX + 5 }}
                onMouseUp={(e) => { moving && setmoving(false) }}
                className="adjustBar"></div>
            <div className="commentManager_commentlist">
                <Outlet></Outlet>
            </div>
        </div>

原理

整个窗口分为三个区域,左侧为文章列表,右侧是用来展示对应文章评论的区域,中间设置了一个宽度为10的区域,用来调节两边区域的大小。

首先,将最大的容器设置为display:flex;

左边的容器设置一个初始宽度,

中间的元素设置固定宽度为10px

右侧容器设置flex:1;填充外层容器剩余空间

处理移动端

在中间的控制条上添加两个事件,一个是onTouchStart,用于记录在一开始触摸时的位置,另一个是onTouchMove,获取手指在屏幕上移动的位置,并减去开始的位置,获取x方向的偏移量。根据这个偏移量来调节左侧容器的宽度,并更新初始值,就实现了预期的效果。

处理PC端

与移动端不同,在PC端需要使用三个事件函数,onMouseDown,标记此时开始调节大小,设置最开始的位置,onMouseMove,获取鼠标移动到的位置,减去初始值获得x方向偏移量,根据偏移量调节左侧容器的宽度,onMouseUp,标记此时不需要调节大小。

注意的是PC端鼠标始终在屏幕上,所以需要一个变量来区分何时鼠标移动需要调节大小,何时不需要,同时将onMouseMove事件绑定在最外层盒子上,可以避免由于中间的控制条太窄,鼠标在移动时偏到外面,造成的move事件里的逻辑不能进行,得不到偏移量,最终导致调节过程不流畅。文章来源地址https://www.toymoban.com/news/detail-458978.html

到了这里,关于React实现可页面可调节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端js react vue怎么实现在线预览doc文档

    先说结论: 目前在纯前端层面没有很好的方案,基本都需要服务端的介入。 优点 :简单易用,无需配置 缺点 :文档需要支持外网访问,且文档会是公开可见的,所以对于一些内部敏感的文档来说,这个显然是不可行的。 需要后端介入配合 onlyoffice地址 这个也要先在服务器

    2024年02月15日
    浏览(80)
  • 配电网电压调节及通信联系研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2023年04月16日
    浏览(35)
  • React实现关键字高亮

    先看效果: 实现很简单通过以下这个函数: 展示某段文本时调用该函数处理后,在展示就能实现高亮效果 原理是: 这个函数的作用是在给定的文本中,将指定的进行高亮标记。它接受两个参数:text(要处理的文本)和 keyword(要高亮标记的)。 函数首先使用

    2024年02月13日
    浏览(41)
  • highlight.js 实现搜索关键词高亮效果

    先看效果: 更新:增加切换显示 折腾了老半天,记录一下 注意事项都写注释了 代码: 更新后代码:

    2024年02月02日
    浏览(49)
  • Element-ui中表格el-table图片预览效果实现(非常实用)

    🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅  文末获取源码联系 🏆先展示效果:   🏆使用的是下面这个插

    2024年02月11日
    浏览(57)
  • Vue:实现输入框/选择列表内容更改,页面实时预览多个内容变化

    在各种前端页面中,比如用户信息注册的页面,往往有多个输入框和多个选项列表。 为了避免用户选错或者输入错误,可以在前端页面上实时将多个输入框的内容拼接起来,显示到页面或者弹出的窗口中,帮助用户核对、检查输入的内容是否有错,提高用户体验。 本文介绍

    2024年02月10日
    浏览(43)
  • Web 页面如何实现动画效果

    Web 页面可以使用多种方式实现动画效果,其中最常用的有两种: CSS 动画:通过 CSS 中的 transition 和 animation 属性来实现动画效果。CSS 动画实现起来简单,性能消耗小,支持广泛。 JavaScript 动画:通过 JavaScript 代码来实现动画效果。JavaScript 动画实现更加灵活,可以实现更多复

    2024年01月19日
    浏览(51)
  • 使用JavaScript实现页面滑动切换效果

      使用JavaScript实现页面滑动切换效果 在现代Web页面设计中,页面滑动切换效果已经成为了一种常见的设计要求,能够提升用户体验,增加页面的交互性。本文将通过JavaScript来实现这一效果。 首先,我们需要在HTML中添加一些基础结构和样式。以下是一个简单的例子:   在

    2024年02月13日
    浏览(54)
  • HTML/CSS实现3D翻转页面效果

    下面是一个基本的例子,展示了如何使用CSS和HTML实现一个3D页面翻转效果: HTML部分: CSS部分: 在这个例子中,我们使用一个包含两个面(正面和背面)的容器div。通过CSS的 transform 属性和 rotateY 函数,我们实现了容器在鼠标悬停时的旋转效果。 你可以根据自己的需求调整容

    2024年01月24日
    浏览(43)
  • css3实现页面元素抖动效果

    html js(vue3) css 参考链接:https://juejin.cn/post/6957517187049324552

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包