当前位置: 首页 > backend >正文

【css js vue】超详细!!实现 tab菜单 动态滑动效果

文章目录

  • 前言
  • 一、实现思路
    • 1.核心一
    • 2.核心二
    • 3.核心三
  • 二、完整代码
    • 1.html
    • 2.css
  • 总结


前言

提示:本文使用vue3技术,且仅介绍滑动效果的实现:

最近产品经理给我提了个新需求,希望能实现tab菜单切换时的滑动效果。
在这里插入图片描述
上面这是我做的效果图,在查找了一些资料之后,发现实现起来并没有特别的麻烦,但是对于我这种CSS学的不是很好的人,前期看起来还是有点懵的,所以写篇文章记录下我最终实现的效果。


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现思路

一般来说,实现这样的菜单我们最常用的是flex布局,我就默认你用的是这个。然后我们会为flex box里的每个item都绑上一个点击事件,这样在切换菜单的时候能展示不同的数据。

为了实现滑动门的效果,核心在于三点:

1.核心一

除了所有的菜单项,我们需要额外增加一个div设置成滑来滑去的滑动门。重点是,需要用到CSS的positon:absolute为滑动门固定位置,每切换一次菜单,都会调整div的左边的间距。 比如当我点击第一个菜单,这个滑动门的左间距是100px,点击第二个菜单,间距变成了200px,依此类推。

 .bg {...position: absolute;cursor: pointer;left: 140px; //控制滑动门的左间距....}

2.核心二

我们需要用到CSS的动画效果,来实现延迟

 .bg {...transition: all .5s;  //CSS过渡动画...}

3.核心三

由于我们设定了position为absolute,滑动门已经脱离文档流了,因此需要用z-index设置层级。需要把 滑动门的z-index设置的靠屏幕里,flexbox的z-index设置的靠屏幕外。越小越靠近屏幕里

 .bg {...z-index: 1;...}

二、完整代码

1.html

代码如下(示例):

下面的代码比较容易懂,我想唯一值得解释的是,:class="{ 'ac': active == item }",当active == item的时候返回true,即class='{ac:true}'那么这个div就有ac属性了。

<div class="tabs_box">//这里我用v-for遍历了菜单栏<div class="tab_item" :class="{ 'ac': active == item }" v-for="item in siteArr" :key="item"@click="handleClick(item)">{{ item }}</div>//这行代码大家不难发现,有几个菜单,我们的滑动块就有几个left属性,可能写的有点笨,大佬可以在评论区给我更好的建议。<div class="bg" :class="{ 'left1': active == siteArr[1] , 'left2': active == siteArr[2],'left3': active == siteArr[3],'left4': active == siteArr[4]}"></div></div>

2.css

代码如下(示例):

.tabs_box {color: #fff;display: flex;align-items: center;justify-content: center;width: 100%;height: 40px;border-radius: 30px;background: #4186f5;.tab_item {z-index: 2; //设置层级非常重要,不然你会发现滑块跑到文字上方了cursor: pointer;width: 18%;height: 100%;line-height: 40px;text-align: center;}//这行代码其实是用来给我们在激活菜单的时候切换字体颜色的.ac {color: #fff;}.bg {position: absolute; //绝对定位cursor: pointer;left: 140px;top: 49px;z-index: 1; //改变层级,置于底层才不会遮挡文字width: 18%;height: 40px;background: #FF9900;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5);transition: all .5s; //实现动画效果}//改变滑块左边的距离.left1 {left: 450px;}.left2 {left: 760px;}.left3 {left: 1080px;}//因为我有四个菜单.left4 {left: 1390px;}}

总结

我讲述的应该是比较详细了,相信大家看了应该也能实现滑动功能。 但是有一些内容我感觉写的比较繁琐,比如 每次切换的时候,也许聪明的你能用js函数实现left值的改变。大家一起加油在这里插入图片描述

http://www.xdnf.cn/news/11795.html

相关文章:

  • 各种音视频编解码学习详解(8)--Real系列
  • 颜色空间(2)
  • 基于博弈树的开源五子棋AI教程[4 静态棋盘评估]
  • Ubuntu11.10安装与使用图文教程
  • CCIE认证知识点之IPv6地址
  • 反恐精英的二十二条军规
  • 发布一款小软件:和讯博客助手-测试版- 0.3.0
  • 艾伟_转载:用C#打造quot;QQ对战平台挤房器quot;
  • 织梦DedeCMS网站源代码分析详解
  • Android手机一键Root原理分析
  • 大数据比赛之数据可视化ECharts 基本api
  • 常用的53款免费软件
  • 51c51单片机学习网
  • Glu Mobile:Age Of Empires III——帝国时代Ⅲ 汉化版
  • Linux 下部署并配置 -Nginx
  • 阿里巴巴的“双11”高并发秒杀终极版教程(Java语言设计)
  • hibernate ResultTransformer (转)
  • 【收藏】C#面试题整理笔试篇(最全1000+道带答案)300道填空 + 300道选择 + 300道判断 + 70道读程序写结果和看程序填空 + 100道简答题
  • 中山市区电信5g覆盖地图_2020中山数字经济发展论坛举行,上线工业互联网平台...
  • Web开发学习心得
  • HTC G13解锁与越狱成功(转)以及刷机
  • 一台电脑变多台——BeTwin 2.0.0.419 破解版+虚拟驱动+安装说明
  • php代码写一串新年祝福,新年祝福QQ留言代码_把幸福装的满满的
  • Runoob.com
  • 基于单片机语音智能导盲仪仿真设计
  • 轩辕剑--资料集(三)
  • 【控制篇 / 应用】(6.0) ❀ 03. 禁止使用 TeamViewer ❀ FortiGate 防火墙
  • iPhone/iPad各种文件路径详解 帮助了解自己的iphone和ipad
  • 国内外10大项目外包平台
  • 麦咖啡企业版McAfee VirusScan Enterprise v8.8授权版