首页 > 其他分享 >你真的会写侧边栏收起动画吗?

你真的会写侧边栏收起动画吗?

时间:2024-04-03 17:00:35浏览次数:25  
标签:容器 动画 sectionRight 侧边 toggle 宽度 收起 200px

业务背景

侧边栏的展开与收起, 是非常常见的前端交互. 下面这段代码是个基础版的demo, 使用html+tailwind编写的

<button id="toggle-btn" type="button">toggle</button>
<div class="w-[500px] h-[300px] flex">
  <section class="flex-1 h-full bg-gray-500">
    <div class="text-lime-50">New Yorkers are facing the winter chill with less warmth this year as the city's most revered soup stand unexpectedly shutters, following a series of events that have left the community puzzled.</div>
  </section>
  <section id="section-right" class="w-[200px] h-full bg-gray-600 transition-all duration-300">
    <div class="text-lime-100">New Yorkers are facing the winter chill with less warmth this year as the city's most revered soup stand unexpectedly shutters, following a series of events that have left the community puzzled.</div>
  </section>
</div>

这段代码的视觉效果就是下面这样的. 通过点击左上角的toggle来进行宽度切换.

image-20240328195036875

为了实现toggle的效果, 我们+上一段js代码

const toggleBtn = document.querySelector('#toggle-btn');
const sectionRight = document.querySelector('#section-right');
toggleBtn.addEventListener('click', () => {
  if (sectionRight.style.width === '0px') {
    sectionRight.style.width = '200px';
  } else {
    sectionRight.style.width = '0';
  }
});

总结下, 使用两栏布局, 右侧固定200px, 左侧自适应, 点击toggle可以隐藏和展示右侧区域. 动画如下

问题

功能已经实现, 而且逻辑也非常简单. 但是却存在一个体验问题, 就是右侧区域在宽度变化至0时, 内容也受到了挤压. 虽然动画时间比较快, 但是仍然能够被人眼捕捉. 让我们放慢速度再看一次

解决方案

首先我们来分析为什么会产生这样的现象, 是因为右侧固定200px, 变成了0px, 又因为设置了transition, 所以宽度是逐渐从200px一点点减小到0的, 我相信找到这个原因对大家来说并不难. 那么我们怎么解决呢?

非常简单! 倒推结果, 想要内容不被压缩, 那么内容宽度一定要始终为200px, 但是这又和200px->0px的transition效果冲突了. 因此, 我们可以在外面再套一个容器, 外部容器起着宽度变化的任务. 那么他里面的容器宽度难道不会变吗? 答案是可以不变. 让外部容器成为relative, 而内部容器是绝对定位且一直贴着容器的left: 0且宽度和外部容器保持一致. 这样在动画执行的时候, 外部容器虽然宽度在变化, 但是内部容器的宽度始终没有变化, 且位置会跟随外部容器发生变化.

直接上代码

<section id="section-right" class="relative w-[200px] h-full bg-gray-600 transition-all" style="transition-duration: 3000ms;">
  <div class="absolute top-0 left-0 w-[200px] h-full">
    <div class="text-lime-100">New Yorkers are facing the winter chill with less warmth this year as the city's most revered soup stand unexpectedly shutters, following a series of events that have left the community puzzled.</div>
  </div>
</section>

我相信大家看到内容超出了容器, 就能理解是怎么一回事儿了. 此时在外部容器+上overflow-hidden即可.

坦白说, css不是我的强项, 也许有更好的办法, 你有什么其他的解决方案吗?


我是前夕, 专注于前端和成长, 希望我的内容可以帮助到你. 公众号: 前夕小课堂

image-20240403101717261

本文禁止转载!

标签:容器,动画,sectionRight,侧边,toggle,宽度,收起,200px
From: https://www.cnblogs.com/evesama/p/18113089

相关文章

  • 2024年4月3日-UE5 走路/跑步+攻击,动画分层混合
    打开主角动画蓝图通过缓存把角色分成上下半身,两个动作 使用骨骼分层,让跑步的时候普通攻击融为一体,上半身攻击的时候下半身依然是跑步,使动画更自然 给骨骼分层混合设置一个分层的点,以此作为上下半身的临界点 点这个按钮 打开骨骼图 把此处的骨骼名称填写完刚才......
  • 玩家角色——攻击动画
    目标玩家角色动画资源处理输入控制玩家角色使用动画插槽播放相应动画1.玩家角色动画资源处理基本步骤和之前一样,但是每张动画的精灵图片需要对X轴进行-18的调整,保证播放动画时轴不会出现出入将处理好的3个动画放入动画源2.输入控制添加增强输入IA_Attack3.玩家角......
  • 2024年4月2日-UE5-普通攻击,动画蒙太奇
    创建一个输入,普通攻击 在战斗意境里,添加普通攻击,然后设置鼠标左键是触发按键 在角色总类里面添加普通攻击,把刚才创建的导入进来 找到资源里的攻击动作,把他转换为蒙太奇,用来绑定攻击动作 然后改名 在主角动画蓝图里添加一个插槽,意思是播放之前设置的移动动作中优......
  • 2024年4月2日-UE5-动画蓝图,混合空间
    创建一个动画蓝图文件夹 新建一个主角的动画蓝图 把主角01蓝图里面的动画播放改为动画蓝图,意思就是后面选用动态的蓝图了,而不是之前选定的预设动画了 创建一个主角的混合空间 打开混合空间,这里意思是速度为0到30之内的时候,0的位置设置一个点,是一个动作。然后后面超......
  • 2-27. 背包物品选择高亮显示和动画
    本节目标实现点击背包中的格子之后,格子会有高亮的效果开始实现修改SlotUI这样写的话,如果有两个格子被点击,那么两个格子都会高亮,这是我们不希望看到的继续修改SlotUI修改InventoryUI给高亮增加动画然后把图片添加到动画里面项目相关代码代码仓库:https://gitee......
  • 使用c++装饰器模式完成 QQ秀这个游戏,给动画人物搭配不同服饰。
    //比如穿T恤,衬衫,外套,皮鞋,运动鞋,靴子...,根据下面的类图完//被装饰的类classPerson{public:   stringm_name;   Person(){};//子类实例化需要无参构造   Person(stringname):m_name(name){}   virtualvoidshow(){cout<<m_name;};};//......
  • vue3+ant-design-vue - 最新实现“侧边动态导航栏+面包屑导航“功能,vue3+ant后台管理
    效果图在vue3+antdesignvue后台管理系统中,详细完成菜单导航+面包屑动态联动功能效果,支持缓存功能、配置简洁、自动跟随route路由进行变化、自动匹配菜单和面包屑导航的文字等,超详细实用的示例demo全部源代码。提供详细示例源代码,新手小白直接复制稍微改下配置就能用了,快......
  • 玩家角色——移动功能和动画蓝图
    目标在玩家蓝图中制作玩家输入制作玩家动画蓝图并新增移动逻辑将玩家蓝图的输入控制和玩家动画蓝图绑定1.在玩家蓝图中制作玩家输入创建输入操作2D游戏中左右移动是1维浮点数创建输入情境映射2D游戏中向左移动的控制按键是反值在角色蓝图的初始化中绑定增强输入系......
  • 如何制作CG动画?渲染农场在其中扮演的角色是什么?
    CG动画制作是一个融合了艺术与技术的综合流程,从初步的概念设计延伸至最终成品。在这一过程中,渲染农场扮演着核心角色,它通过提供充足的计算能力来加快动画的渲染速度,从而确保创作团队能够以高效率制作出优质的动画作品。一、cg动画是怎么制作的?cg动画分为:二维cg动画和三维cg动......
  • WPF中动画教程(DoubleAnimation的基本使用)
    实现效果今天以一个交互式小球的例子跟大家分享一下wpf动画中DoubleAnimation的基本使用。该小球会移动到我们鼠标左键或右键点击的地方。该示例的实现效果如下所示:页面设计xaml如下所示:<Windowx:Class="AnimationDemo.MainWindow"xmlns="http://schemas.microsof......