前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现边框丝滑移动效果

实现边框丝滑移动效果

作者头像
切图仔
发布2022-09-14 16:24:08
3840
发布2022-09-14 16:24:08
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

HTML结构

代码语言:javascript
复制
<ul class="menus">
    <div class="active-border"></div>
    <li class="menu-item" >菜单项一</li>
    <li class="menu-item" >菜单项二</li>
    <li class="menu-item" >菜单项三</li>
</ul>

.menus添加一个下边框做打底

代码语言:javascript
复制
.menus::after {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 2px;
    background-color: #eee;
    z-index: 99;
}

激活边框样式

代码语言:javascript
复制
.menus { position:relative }
.active-border {
    position: absolute;
    bottom: -2px;
    left: 0;
    z-index: 100;
    height: 2px;
    width: 100px; // 动态设置
    background: #ff7a1c;
    transition: transform .3s cubic-bezier(.645,.045,.355,1);
    transform: translateX(590px);// 动态设置
}

动画实现思路

当菜单项被点击的时候设置active-border的宽度为被点击菜单项的宽度 同时获取menus相对于body的位置,当前被点击菜单项的位置

active-border的translateX值 = 当前被点击菜单项的X坐标 - menus的X坐标

关键代码

代码语言:javascript
复制
let curMenuRect = document.querySelectorAll(".menus li")[index].getClientRects()[0]
let MentBoxRect = document.querySelectorAll(".menus")[0].getClientRects()[0]
this.activeBorderWidth = e.path[0].clientWidth; // active-border的宽度
this.activeBorderX = Math.abs(curMenuRect.x - MentBoxRect.x) // active-border的X坐标
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTML结构
  • 动画实现思路
  • 关键代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档