基于vue实现移动端点击上方导航,内容滑动切换,滑动内容导航自动切换。

2023-11-19

这是在日常开发过程中常见的选项卡(带滑动切换效果),小白一枚,不足之处还望体谅,包涵,这也是第一次尝试写博客,以后会继续分享一些工作中的问题与收获。

实现效果:

点击上方导航,当前导航添加样式,下方内容滑动切换,滑动下方内容上面导航切换。

第一步:静态布局

html:

<div id="lao" class="warp">
            <!--导航-->
            <div class="navList">
                <ul>
                    <li  v-for="(myliebiaoList,index) in myList">
                        {{myliebiaoList.name}}
                    </li>
                </ul>
            </div>

            <!--内容-->
            <div class="mainContent">                                  
                        <div v-for="lunbo in myContent" >{{lunbo.name}}</div>                              
            </div>
        </div>

js:

<script src="./dist/js/vue.js"></script> //引入vue.js

<script type="text/javascript">

var vm = new Vue({

     el: '#lao',

     data: {

            myList: [
                {
                    name: '吃'
                },
                {
                    name: '大'
                },
                {
                    name: '白'
                },
                {
                    name: '菜'
                },
                {
                    name: '的'
                },
                {
                    name: '熊'
                }
            ], //存放类型列表
            myContent: [
                {
                    name: '吃'
                },
                {
                    name: '大'
                },
                {
                    name: '白'
                },
                {
                    name: '菜'
                },
                {
                    name: '的'
                },
                {
                    name: '熊'
                }
            ] //存放内容列表

     }

})

 

</script>

基本的上下结构静态页面布局已经有了。

第二步:点击当前上方导航添加样式

利用vue中的v-bind实现:

给li标签绑定class:    <li :class="{myColor:index==isActive}" @click="liseGo(index)" v-for="(myliebiaoList,index) in myList">
                                          {{myliebiaoList.name}}
                                   </li>

在style中定义:myColor {
                                 background: turquoise;
                                 color: white;
                         }

在js中添加点击事件:liseGo(index) {
                                              this.isActive = index;
                                   }

                                   isActive在data中声明为0,默认给第一个导航添加样式(通过v-for遍历的,下标从0开始)

这个时候点击上方当前导航的时候是可以实现添加样式。

第三步:点击下方内容滑动切换

注:使用swiper实现内容左右滑动

1.引入下载好的swiper

<script src="./dist/js/swiper.min.js"></script>
<link rel="stylesheet" href="./dist/css/swiper.min.css">

/*可自行去swiper官网下载*/

2.参照官方使用方法,改变下方内容布局

//这是下方内容盒子

<div class="mainContent">
                <div class="swiper-container">
                    <div class="swiper-wrapper">

                        <div v-for="lunbo in myContent" class="swiper-slide">{{lunbo.name}}</div>
                    </div>
                </div>

   </div>

3.写入对应的js

//在methods中封装一个swiper方法

1.       getSwiper() {                
                // swiper-container  class名称
                this.mySwiper = new Swiper('.swiper-container', {
                    autoplay: false, //可选选项,自动滑动                  
                })

            }

//direction: 'vertical', // 垂直切换选项 (可自己选择垂直还是左右滑动)

2.在钩子函数:mounted中调用封装的方法

mounted() {
            // 初始化swiper
            this.getSwiper();
 }

这个时候下方内容效果实现了,可以左右滑动切换

上方导航点击当前有样式,下方内容也可以滑动切换,下面要做的就是把导航跟内容关联起来

第四步:点击上方导航下方内容滑动切换

参照swiper官方文档api,有个方法控制Swiper切换到指定slide。

使用方法:mySwiper.slideTo(index, speed, runCallbacks)         

index num 必选 指定将要切换到的slide的索引
speed num 可选 切换速度(单位ms)
runCallbacks boolean 可选 设置为false时不会触发transition回调函数

在点击事件中添加该方法:

liseGo(index) {
                          this.isActive = index;

                          this.mySwiper.slideTo(index, 500, false); //切换到第index个slide,速度为0.5秒
                       }

添加该方法后,点击上方导航,下面内容是可以实现滑动切换指定内容的。

最后一步:左右滑动下方内容,上方导航跟着切换

一样参照官方api文档,找到方法:slideChangeTransitionStart   //回调函数,swiper从当前slide开始过渡到另一个slide时执行

用法:on: {

                           slideChangeTransitionStart: function(){

                                  //在回调中写入逻辑处理

                                 that.isActive = this.activeIndex;

                                //一定要重新声明this指向,因为该方法中的this.activeIndex指向的是swiper实例本身,而isActive则指向的是vue实例本身

                            }

                  }

//输出的activeIndex是过渡后的slide索引。

这样基于vue+swiper实现点击上方导航,下面内容滑动切换,滑动下方内容,上方导航自动切换的效果就大功告成了!

第一次写博客,不足之处多多体谅。

 

附全部代码:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>动态切换</title>
        <link rel="stylesheet" href="./dist/css/swiper.min.css">
        <style type="text/css">
            * {
                padding: 0;
                margin: 0;
                font-size: 24px;
            }

            .warp {
                width: 100%;
                height: 100vh;
                background: white;
            }

            ul {
                display: -webkit-box;
                overflow-x: scroll;
                white-space: nowrap;
            }

            ul>li {
                width: 62.5px;
                text-align: center;
                display: inline-block;
                padding: 5px 10px;
                box-sizing: border-box;
                height: 50px;
                line-height: 50px;
                border: 1px solid #c3c3c3;
                text-align: center;
            }

            .navList {
                overflow: hidden;
            }

            .swiper-wrapper>div:nth-child(1) {
                height: 150px;
                line-height: 150px;
                background: pink;
                text-align: center;
            }

            .swiper-wrapper>div:nth-child(2) {
                height: 150px;
                line-height: 150px;
                background: blanchedalmond;
                text-align: center;
            }

            .swiper-wrapper>div:nth-child(3) {
                height: 150px;
                line-height: 150px;
                background: seagreen;
                text-align: center;
            }

            .swiper-wrapper>div:nth-child(4) {
                height: 150px;
                line-height: 150px;
                background: blue;
                text-align: center;
            }

            .swiper-wrapper>div:nth-child(5) {
                height: 150px;
                line-height: 150px;
                background: lawngreen;
                text-align: center;
            }
            .swiper-wrapper>div:nth-child(6) {
                height: 150px;
                line-height: 150px;
                background: purple;
                text-align: center;
            }
            .myColor {
                background: turquoise;
                color: white;
            }
        </style>
    </head>

    <body>
        <div id="lao" class="warp">
            <!--导航-->
            <div class="navList">
                <ul>
                    <li :class="{myColor:index==isActive}" @click="liseGo(index)" v-for="(myliebiaoList,index) in myList">
                        {{myliebiaoList.name}}
                    </li>
                </ul>
            </div>

            <!--内容-->
            <div class="mainContent">
                <div class="swiper-container">
                    <div class="swiper-wrapper">
                        <div v-for="lunbo in myContent" class="swiper-slide">{{lunbo.name}}</div>
                    </div>
                </div>
            </div>
        </div>
    </body>

    <script src="./dist/js/vue.js"></script>
    <script src="./dist/js/swiper.min.js"></script>

</html>

<script type="text/javascript">
    var vm = new Vue({
        el: '#lao',
        data: {
            mySwiper: '',
            isActive: 0,
            age: '',
            msg: '啊哈哈',
            myList: [
                {
                    name: '吃'
                },
                {
                    name: '大'
                },
                {
                    name: '白'
                },
                {
                    name: '菜'
                },
                {
                    name: '的'
                },
                {
                    name: '熊'
                }
            ], //存放类型列表
            myContent: [
                {
                    name: '吃'
                },
                {
                    name: '大'
                },
                {
                    name: '白'
                },
                {
                    name: '菜'
                },
                {
                    name: '的'
                },
                {
                    name: '熊'
                }
            ] //存放内容列表
        },
        methods: {
            liseGo(index) {
                this.isActive = index;
                this.mySwiper.slideTo(index, 500, false); //切换到第index个slide,速度为0.5秒
            },
            //封装swiper
            getSwiper() {
                var that = this;
                // swiper-container  class名称
                this.mySwiper = new Swiper('.swiper-container', {
                    autoplay: false, //可选选项,自动滑动
                    on: {
                        slideChangeTransitionEnd: function() {
                            // this指向的是当前的swiper实例,that指向的是vue实例
                            that.isActive = this.activeIndex; //切换结束时,告诉我现在是第几个slide
                        },
                    },
                })

            }
        },
        mounted() {
            // 初始化swiper
            this.getSwiper();
        }
    })
</script>

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于vue实现移动端点击上方导航,内容滑动切换,滑动内容导航自动切换。 的相关文章

随机推荐

  • Zabbix5.0之邮件告警

    前言 依据zabbix5 0监控Nginx服务状态 当出现故障 或者异常关闭时 zabbix第一时间通过邮件通知到相关人员进行处理 以下文档并不讲述zabbix5 0部署 需要部署zabbix5 0的可参考 CentOS7 部署zabbix
  • k8s、docker关联目录占用空间太大

    今天突然磁盘满了 查看了一下 都是k8s docker关联的目录占用太大 var lib docker overlay2和 data registry docker registry v2 blobs sha256 使用第一种方式删除了悬空
  • appimage文件怎么安装_Linux应用安装有福啦!和苹果Mac一样方便的单文件安装

    自从用了苹果macbook 和windows基本上就再见了 苹果系统的稳定性太出色了 使用完合上盖子放十天半个月的没一点问题 一叫就醒 一醒就能接着工作 windows系统不行 要么睡了叫不醒 要么叫醒后电脑突然弹出个错误提示 甚至还可能蓝
  • 按where条件用expdp导出表

    按where条件用expdp导出表 情况1 情况2 其他说明 情况1 emp main表需要根据sendtime字段导出2018年的数据 参数文件emp main par的内容如下 tables emp main dumpfile emp
  • CentOs7.4 搭建 svn HTTP服务器

    一 通过yum安装svn yum y install mod dav svn yum y install subversion 通过如下命令查看svn 的安装位置 rpm ql subversion 二 创建版本目录库 此仅为目录 为后面创
  • 简单LSTM代码讲解

    仅供本人参考 错了概不负责 part1 图源 https www zhihu com question 41949741 answer 309529532 我们在使用tf nn rnn cell BasicLSTMCell时 有一个要自己设
  • STM32定时器系列 - STM32定时器输出比较

    STM32 定时器除了基本计数定时功能外 还对外扩展了输入 输出通道 从而可以实现输入捕获 比较输出功能 比较输出 Compare Output 功能 定时器通过对预设的比较值与定时器的值做匹配比较之后 并依据相应的输出模式从而实现各类输出
  • 大数据面试题及答案

    Hadoop 相关试题 Hive 相关试题 1 hive表关联查询 如何解决数据倾斜的问题 倾斜原因 map输出数据按key Hash的分配到reduce中 由于key分布不均匀 业务数据本身的特点 建表时考虑不周 等原因造成的reduce
  • 如何快速检测代理IP质量?方法与工具全干货

    一直以来 IP代理都是出海跨境业务的刚需 质量好的IP代理 除了在跨境业务产生巨大作用 在SEO监控 爬虫抓取 市场研究等领域也发挥着很大的作用 但是 对于IP代理的质量检测是我们选择高标准IP代理的一句 我们一般都会建议在使用IP代理前
  • 5G技术优势

    1G实现了移动通话 2G实现了短信 数字语音和手机上网 3G带来了基于图片的移动互联网 而4G则推动了移动视频的发展 5G网络则视为未来物联网 车联网等万物互联的基础 同时 5G普及将使得包括虚拟现实和增强现实这些技术成为主流 4G网络是专
  • 修改网页logo

    在用浏览器打开网站的时候 浏览器标签页上面有网站的图标 类似于logo小图标 如下图 步骤1 打开你的tomcat的安装目录 我的目录实在G盘 G apache tomcat 7 0 53 windows x64 apache tomcat
  • java进制转换方法

    一 十进制向二 八 十六进制的转换 方法一 Integer toBinaryString i 表示十进制转为二进制 Integer toOctalString i 表示十进制转为八进制 Integer toHexString i 表示十进制
  • 周庄不买门票攻略_周庄古镇旅游攻略

    周庄古镇旅游攻略 周庄古镇是世界文化遗产预选地 首批国家5A级旅游景区 位于苏州城东南 位于昆山 吴江 上海三地交界处 周庄古镇四面环水 因河成镇 依水成街 以街为市 井字型河道上完好保存着14座建于元 明 清各代的古石桥 800多户原住民
  • org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java

    项目场景 项目中执行clean 再执行install时报错 错误如下 org springframework boot maven RepackageMojo has been compiled by a more recent versi
  • Python库之自然语言处理和文本挖掘

    来源地址 http www python88 com topic 37015 https mp weixin qq com s sPAomFg 5JZigFUG CtnaQ 自然语言处理和文本挖掘库主要用于以自然语言文本为对象的数据处理和建
  • linux基本命令练习

    1 列出 etc目录下的所有文件名称 2 创建文件file1 和file2 并复制到 home目录下 3 显示以ma开头的所有命令 ma 双击两次 TAB键 4显示所有文件名中有 bash的文件 用tab命令补全 5 显示当前所在的目录路径
  • android图像识别(百度普通物体识别)

    android图像识别 采用百度sdk 识别准确率基本上能用 主要缺陷是百度sdk免费额度有限 demo链接如下 仅供参考https download csdn net download android xc 12274161
  • Python进阶之CrawlSpider的应用及Scrapy配置项的引用

    1 CrawlSpider的应用 CrawlSpider可以根据规则自动分析链接的数据并按照正则的要求取出需要的数据 scrajpy startproject yg cd yg 注意 t crawl参数 scrapy genspider t
  • 解决SqlServer批量插入最多2100条数据的方法

    SqlServer批量插入数据时最多不能超过2100条 记录一下解决办法 Java代码 public void batchInsert List
  • 基于vue实现移动端点击上方导航,内容滑动切换,滑动内容导航自动切换。

    这是在日常开发过程中常见的选项卡 带滑动切换效果 小白一枚 不足之处还望体谅 包涵 这也是第一次尝试写博客 以后会继续分享一些工作中的问题与收获 实现效果 点击上方导航 当前导航添加样式 下方内容滑动切换 滑动下方内容上面导航切换 第一步