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来定位
Feb 20 Javascript
Gird事件机制初级读本
Mar 10 Javascript
jQuery Mobile 导航栏代码
Nov 01 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
JavaScript中原型和原型链详解
Feb 11 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 Javascript
基于JavaScript实现每日签到打卡轨迹功能
Nov 29 Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 Javascript
详解小程序云开发数据库
May 20 Javascript
解决Vue动态加载本地图片问题
Oct 09 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 clearstatcache()函数详解
2010/03/02 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
python 实现插入排序算法
2012/06/05 Python
python使用marshal模块序列化实例
2014/09/25 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python关闭占用端口方式
2019/12/17 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
python中adb有什么功能
2020/06/07 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
孔庙导游词
2015/02/04 职场文书
涨价通知
2015/04/23 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
python游戏开发Pygame框架
2022/04/22 Python