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 相关文章推荐
JScript内置对象Array中元素的删除方法
Mar 08 Javascript
JS按回车键实现登录的方法
Aug 25 Javascript
js简单实现点击左右运动的方法
Apr 10 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
May 15 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 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仿盗链代码
2012/06/03 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
详解JavaScript树结构
2017/01/09 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
python 写的一个爬虫程序源码
2016/02/28 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
财务总监管理职责范文
2014/03/09 职场文书
老公出轨后的保证书
2015/05/08 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书