vue实现全屏滚动效果(非fullpage.js)


Posted in Javascript onMarch 07, 2020

本文实例为大家分享了vue实现全屏滚动效果(的具体代码,供大家参考,具体内容如下

是什么

网页的一个页面占据一屏的宽高,多个页面上下或者左右拼接在一起。当滑动鼠标滚轮,或点击导航按钮时,可以平滑到对应的页面。

此次只实现鼠标滚动

实现原理

使用mousewheel , DOMMouseScroll(火狐用)监听鼠标滚动事件,当鼠标上下的滚动的时候,当前的页面transformY(屏高)或者transformX(屏宽)

代码实现

HTML

<template>
 <div class="fullPage" ref="fullPage">
 <div
  class="fullPageContainer"
  ref="fullPageContainer"
  @mousewheel="mouseWheelHandle" //监听鼠标事件
  @DOMMouseScroll="mouseWheelHandle" // 监听鼠标事件
 >
  <div class="section section1">1</div>
  <div class="section section2">2</div>
  <div class="section section3">3</div>
  <div class="section section4">4</div>
 </div>
 </div>
</template>

JS

<script>
export default {
 name: "Home",
 data() {
 return {
  fullpage: {
  current: 1, // 当前的页面编号
  isScrolling: false, // 是否在滚动,是为了防止滚动多页,需要通过一个变量来控制是否滚动
  deltaY: 0 // 返回鼠标滚轮的垂直滚动量,保存的鼠标滚动事件的deleteY,用来判断是往下还是往上滚
  }
 };
 },
 methods: {
 next() { // 往下切换
  let len = 4; // 页面的个数
  if (this.fullpage.current + 1 <= len) { // 如果当前页面编号+1 小于总个数,则可以执行向下滑动
  this.fullpage.current += 1; // 页面+1
  this.move(this.fullpage.current); // 执行切换
  }
 },
 pre() {// 往上切换
  if (this.fullpage.current - 1 > 0) { // 如果当前页面编号-1 大于0,则可以执行向下滑动
  this.fullpage.current -= 1;// 页面+1
  this.move(this.fullpage.current);// 执行切换
  }
 },
 move(index) {
  this.fullpage.isScrolling = true; // 为了防止滚动多页,需要通过一个变量来控制是否滚动
  this.directToMove(index); //执行滚动
  setTimeout(() => {  //这里的动画是1s执行完,使用setTimeout延迟1s后解锁
  this.fullpage.isScrolling = false;
  }, 1010);
 },
 directToMove(index) {
  let height = this.$refs["fullPage"].clientHeight; //获取屏幕的宽度
  let scrollPage = this.$refs["fullPageContainer"]; // 获取执行tarnsform的元素
  let scrollHeight; // 计算滚动的告诉,是往上滚还往下滚
  scrollHeight= -(index - 1) * height + "px";
  scrollPage.style.transform = `translateY(${scrollHeight})`;
  this.fullpage.current = index;
 },
 mouseWheelHandle(event) { // 监听鼠标监听
  // 添加冒泡阻止
  let evt = event || window.event;
  if (evt.stopPropagation) {
  evt.stopPropagation();
  } else {
  evt.returnValue = false;
  }
  if (this.fullpage.isScrolling) { // 判断是否可以滚动
  return false;
  }
  let e = event.originalEvent || event;
  this.fullpage.deltaY = e.deltaY || e.detail; // Firefox使用detail
  if (this.fullpage.deltaY > 0) {
  this.next();
  } else if (this.fullpage.deltaY < 0) {
  this.pre();
  }
 }
 }
};
</script>

CSS

<style scoped>
.fullPage{
 height: 100%;//一定要设置,保证占满
 overflow: hidden;//一定要设置,多余的先隐藏
 background-color: rgb(189, 211, 186);
}
.fullPageContainer{
 width: 100%;
 height: 100%;
 transition: all linear 0.5s;
}
.section {
 width: 100%;
 height: 100%;
 background-position: center center;
 background-repeat: no-repeat;
}
.section1 {
 background-color: rgb(189, 211, 186);
 background: url("./assets/intro-bg.jpg");
}
.section1 .secction1-content {
 color: #fff;
 text-align: center;
 position: absolute;
 top: 40%;
 right: 0;
 left: 0;
}
.secction1-content h1 {
 font-size: 40px;
 padding-bottom: 30px;
}
.secction1-content p {
 font-size: 20px;
}
.section2 {
 background-color: rgb(44, 48, 43);
}
.section3 {
 background-color: rgb(116, 104, 109);
}
.section4 {
 background-color: rgb(201, 202, 157);
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中的几个关键概念的理解-原型链的构建
May 12 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
Jun 06 Javascript
Javascript闭包实例详解
Nov 29 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
jsonp跨域请求实现示例
Mar 13 Javascript
Bootstrap常用组件学习(整理)
Mar 24 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
node中的cookie的具体使用
Sep 13 Javascript
浅谈webpack 四个核心概念之Entry
Jun 12 Javascript
分享8个JavaScript库可更好地处理本地存储
Oct 12 Javascript
微信小程序实现底部弹出模态框
Nov 18 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 #Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 #Javascript
Vue实现手机扫描二维码预览页面效果
May 28 #Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
Mar 07 #Javascript
微信小程序实现比较功能的方法汇总(五种方法)
Mar 07 #Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 #Javascript
js实现选项卡效果
Mar 07 #Javascript
You might like
php实现ping
2006/10/09 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
php时间函数用法分析
2016/05/28 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
php输出图像的方法实例分析
2017/02/16 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
js实现右键菜单功能
2016/11/28 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
详解python Todo清单实战
2018/11/01 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
python中os.remove()用法及注意事项
2021/01/31 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
初中生期末评语大全
2014/04/24 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
庆元旦主持词
2015/07/06 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
PyTorch中permute的使用方法
2022/04/26 Python