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

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

前言
最近产品经理给我提了个新需求,希望能实现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;}}
http://www.lryc.cn/news/2421199.html

相关文章:

  • 手动安装msu补丁
  • 有道词典的本地/扩展/离线词库
  • Ubuntu 彻底卸载 Opera 浏览器
  • PQ硬盘分区魔术师怎么用|PQ8.05硬盘分区教程图解
  • 安凯anycloud39EV330开发环境搭建
  • [转]Flixel只能用于Flex吗?
  • 【笔记】使用nvm install下载显示淘宝镜像证书过期
  • [新版新概念英语1-4册全部视频和课本]
  • js动态添加和移除disabled属性和style
  • 基于 Spark 的数据分析香港六合彩开奖号码采集官网实践
  • clannad手游汉化版_clannad游戏中文版
  • mysql查询关键词总结
  • 6.2路由器与交换机的作用与特点
  • VMware View 5.0 – 远程图形工作站配置篇
  • 用计算机测试生日,超准生日爱情配对测试
  • 最全、最详细的MySQL常用命令(MySQL)
  • 干式真空泵原理_如何安装干式墙锚在墙壁上悬挂重物
  • 【转】2009年值得去关注的15个国内web2.0网站
  • 赢销侠的秘密武器:如何通过创新思维提升业绩
  • [喵咪开源软件推荐(5)]开源DNS服务-bind
  • Linux - tftp
  • 【Windows源码分析】(一)初始化内核与执行体子系统
  • win10系统任务栏卡死怎么办(三种方式)
  • 去除织梦底部版权信息Power by DedeCms
  • Proteus中常用元器件快速查找教程
  • JavaScript深入浅出(进阶)
  • python shell手机版_PythonScriptShell/Python for s60 3rd v1.4.5
  • 【Oracle软件下载大全】Oracle 9i、10g、11g软件下载地址大全—最新下载!
  • MFC绘制圆形进度条(附完整源码)
  • firefox android 阅读模式,何必羡慕Safari 5?火狐浏览器也有“阅读模式”