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 相关文章推荐
js left,right,mid函数
Jun 10 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
详解Vue单元测试case写法
May 24 Javascript
Vue无限滑动周选择日期的组件的示例代码
Jul 18 Javascript
Node.js 使用request模块下载文件的实例
Sep 05 Javascript
解决vuex刷新状态初始化的方法实现
Aug 15 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 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
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
Python中创建二维数组
2018/10/17 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
如何使用python代码操作git代码
2020/02/29 Python
Python: glob匹配文件的操作
2020/12/11 Python
客户代表实习人员自我鉴定
2013/09/27 职场文书
食品安全演讲稿
2014/09/01 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
运动会加油稿30字
2015/07/21 职场文书
中学团支部工作总结
2015/08/13 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
python之django路由和视图案例教程
2021/07/26 Python