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实现复制功能各浏览器支持情况实测
Jul 18 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
Angular.js中用ng-repeat-start实现自定义显示
Oct 18 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
关于layui时间回显问题的解决方法
Sep 24 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 Javascript
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
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 at(@)符号的用法简介
2009/07/11 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
对Python中plt的画图函数详解
2018/11/07 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
如何基于Python创建目录文件夹
2019/12/31 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
人事任命书范文
2014/06/04 职场文书
企业宣传标语
2014/06/09 职场文书
学籍证明模板
2014/11/21 职场文书
机器人总动员观后感
2015/06/09 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
pandas取dataframe特定行列的实现方法
2021/05/24 Python
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL