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 相关文章推荐
含有CKEditor的表单如何提交
Jan 09 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
jQuery中empty()方法用法实例
Jan 16 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
Vue自定义指令详解
Jul 28 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 Javascript
深入了解js原型模式
May 30 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
小程序分享链接onShareAppMessage的具体用法
May 22 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产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python中实现的RC4算法
2015/02/14 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
英语商务邀请函范文
2014/01/16 职场文书
财产保全担保书范文
2014/04/01 职场文书
依法行政工作汇报
2014/10/28 职场文书
实训报告范文大全
2014/11/04 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
丽江古城导游词
2015/02/03 职场文书
《社戏》教学反思
2016/02/22 职场文书