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 相关文章推荐
jquery HotKeys轻松搞定键盘事件代码
Aug 30 Javascript
javascript 处理null及null值示例
Jun 09 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
javascript制作照片墙及制作过程中出现的问题
Apr 04 Javascript
JavaScript原生节点操作小结
Jan 17 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
vue 自定义指令自动获取文本框焦点的方法
Aug 25 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
antd design table更改某行数据的样式操作
Oct 31 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
一个odbc连mssql分页的类
2006/10/09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
Python性能优化技巧
2015/03/09 Python
浅谈django中的认证与登录
2016/10/31 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
Python中字符串与编码示例代码
2019/05/20 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python实现大文件分割与合并
2019/07/22 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Django视图、传参和forms验证操作
2020/07/15 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
个人自我鉴定范文
2013/10/04 职场文书
总经理职责
2013/12/22 职场文书
小学生安全保证书
2014/02/01 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
购房委托书
2014/10/15 职场文书
《称赞》教学反思
2016/02/17 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
诚信高考倡议书
2019/06/24 职场文书
SQL中的连接查询详解
2022/06/21 SQL Server