【VUE中实现锚点的平滑滚动 + VUE 全屏滚动】

本文介绍了如何在Vue.js项目中实现页面锚点平滑滚动和全屏滚动效果。首先,通过布局组件和Header组件实现锚点定位,利用Vue的事件传递实现点击TAB时的平滑滚动。接着,详细讲解了全屏滚动的实现,包括安装vue-fullpage.js库,配置选项如anchors、navigation等,以及相应的HTML结构。两种方法都提供了良好的用户体验,适用于多屏内容展示场景。
摘要由CSDN通过智能技术生成

目录

A.锚点的平滑滚动--------------------------------

1.效果

2.最外层:layout组件

3.头部导航:Header组件

4.关键部分:

 B. 全屏滚动

1.安装

2.main.js中引入 

3.HTML结构



需求:点击TAB,可以实现板块的快速定位,平滑滚动,

起初思路把买个TAB对应的页面当成单独的页面,所以方向错了,成了不同页面间的跳转,其实应该是一个页面中有不同的组件,每个组件占一屏,点击TAB锚点定位

A.锚点的平滑滚动--------------------------------

1.效果

图片质量差,凑活看吧,不知道怎么只播放一次

2.最外层:layout组件

header为头部导航TAB

transition包裹了router-view,用于给不同页面之间的跳转加动效

<template>
    <div class="layout">
        <Header
            @routerEvent="layoutEvent"
            :changeActive="changeActive"
        ></Header>
        <transition
            mode="out-in"
            :enter-active-class="enterClass"
            :leave-active-class="leaveClass">
            <router-view></router-view>
        </transition>
        <!-- <Footer></Footer> -->
    </div>
</template>

3.头部导航:Header组件

span为Tab,添加点击事件,向父组件layout中emit出去

<template>
    <div class="header" :class="{'teshu': changeActive===0}">
        <div class="header_tabBox">
            <img src="../../assets/img/logo.png" alt="">
            <span
             v-for="(item, idx) in tabList" :key="idx"
             :class="{'active': changeActive === idx}"
             @click="routerEvent(item, idx)">{{item.label}}
             </span>
        </div>
    </div>
</template>

4.关键部分:

在具体页面部分,将所有组件,包括home, aboutus,service,case,concat,分别对应首页,关于我们,服务对象,案例,联系五个部分,引入在一起

因为我们实现的需求看似是不同的页面跳转并且可以顺滑滚动,实际是一个页面中锚点的跳转

在每一个组件的最外层需要加入对应id,比如.scroll-item

<template>
  <div class="outer">
    <div id="home" class="recommendPage scroll-item">
      <swiper :options="swiperOption" ref="mySwiper">
        <swiper-slide v-for="(item, idx) in bannerList" :key="idx">
          <img :src="item.url" alt="">
        </swiper-slide>
        <div class="swiper-pagination" slot="pagination"></div>
        <div class="swiper-button-prev" slot="button-prev"></div>
        <div class="swiper-button-next" slot="button-next"></div>
      </swiper>
    </div>
    <AboutUs></AboutUs>
    <Service></Service>
    <Case></Case>
    <Concat></Concat>
  </div>

</template>
layoutEvent(item, idx) {
            const vm = this;
            let items  = document.querySelectorAll(".scroll-item");
            for (var i = 0; i < items.length; i++) {
                if (idx === i) {
                        // location.hash = item.name
                    items[i].scrollIntoView({
                      block: "start",//默认跳转到顶部
                      behavior: "smooth"//滚动的速度
                    });
                }
            }
        }

 B. 全屏滚动

上边是第一种思路用到锚点,其实还可以用fullpage实现全屏滚动

1.安装

npm install --save vue-fullpage.js

2.main.js中引入 

import Vue from 'vue'

import 'fullpage.js/vendors/scrolloverflow' // Optional. When using scrollOverflow:true

import './fullpage.scrollHorizontally.min' // Optional. When using fullpage extensions

import VueFullPage from 'vue-fullpage.js'   (注意page的P是大写)

Vue.use(VueFullPage);

3.HTML结构

ref  id  section都是必须的固定结构

<div>
    <full-page ref="fullpage" :options="options" id="fullpage">
    <div class="section">
      First section ...
    </div>
    <div class="section">
      Second section ...
    </div>
  </full-page>
</div>

 可配置选项:

  • anchors:定义锚链接,默认值为[],有了锚链接,就可以快速的打开定位到某一页面,也是我们实现导航栏的关键;

比如这个例子中,我本来用的是第一种思路:锚点跳转+history模式,改用fullpage之后,我的路由中会出现对应的hash

 

  • lockAnchors:是否锁定锚链接,默认为false,如果设定为true,定义的锚链接,也就是anchors属性就没有效果了;

  • menu:绑定菜单,设定相关属性与anchors的值相对应后,菜单可以控制滚动,默认为false;

  • navigation:是否显示导航,默认为false,如果设置为true,会显示小圆点,作为导航;

  • navigationPostion:导航小圆点的位置,可以设置为left或right;

  • navigationTooltips:导航小圆点的tooltips的设置,默认为[],注意按照顺序设置。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值