javascript - 使 Fullpage-Scroll-Script 不那么静态
问题描述
嘿嘿,
我得到了一点Fullpage-Scroll-Script
,我想让它不那么静态。Div
因此,与其通过不同的(.one、.two、.tree ...)调用每个Class
脚本,我想让脚本Divs
在只有一个Class
(.page)的情况下工作。我自己用.each() function
from jQuery
... 尝试过,但我无法让它工作。
这是当前的Script
:
// Fullpage Scroll Script
function ScrollHandler(pageClass) {
var page = $('.' + pageClass);
var pageStart = page.offset().top;
var pageJump = false;
function scrollToPage() {
pageJump = true;
$('html, body').animate({
scrollTop: pageStart
}, {
duration: 1000,
easing:'swing',
complete: function() {
pageJump = false;
}
});
}
window.addEventListener('wheel', function(event) {
var viewStart = $(window).scrollTop();
if (!pageJump) {
var pageHeight = page.height();
var pageStopPortion = pageHeight / 2;
var viewHeight = $(window).height();
var viewEnd = viewStart + viewHeight;
var pageStartPart = viewEnd - pageStart;
var pageEndPart = (pageStart + pageHeight) - viewStart;
var canJumpDown = pageStartPart >= 0;
var stopJumpDown = pageStartPart > pageStopPortion;
var canJumpUp = pageEndPart >= 0;
var stopJumpUp = pageEndPart > pageStopPortion;
var scrollingForward = event.deltaY > 0;
if ( ( scrollingForward && canJumpDown && !stopJumpDown) || (!scrollingForward && canJumpUp && !stopJumpUp)) {
event.preventDefault();
scrollToPage();
}
} else {
event.preventDefault();
}
});
}
new ScrollHandler('one');
new ScrollHandler('two');
new ScrollHandler('three');
* {
margin:0;
padding:0;
}
.page {
height: 100vh;
}
.one { background-color: blue; }
.two { background-color: green; }
.three { background-color: orange; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page one"></div>
<div class="page two"></div>
<div class="page three"></div>
所以不要使用:
new ScrollHandler('one');
new ScrollHandler('two');
new ScrollHandler('three');
我试着用这个:
$('.page').each(function() {
new ScrollHandler('page');
}
但它只适用于第一个Div
。
解决方案
您需要传入$(this)
每个循环并更改页面变量以直接获取参数:
// Fullpage Scroll Script
function ScrollHandler(pageClass) {
var page = pageClass;
var pageStart = page.offset().top;
var pageJump = false;
function scrollToPage() {
pageJump = true;
$('html, body').animate({
scrollTop: pageStart
}, {
duration: 1000,
easing: 'swing',
complete: function() {
pageJump = false;
}
});
}
window.addEventListener('wheel', function(event) {
var viewStart = $(window).scrollTop();
if (!pageJump) {
var pageHeight = page.height();
var pageStopPortion = pageHeight / 2;
var viewHeight = $(window).height();
var viewEnd = viewStart + viewHeight;
var pageStartPart = viewEnd - pageStart;
var pageEndPart = (pageStart + pageHeight) - viewStart;
var canJumpDown = pageStartPart >= 0;
var stopJumpDown = pageStartPart > pageStopPortion;
var canJumpUp = pageEndPart >= 0;
var stopJumpUp = pageEndPart > pageStopPortion;
var scrollingForward = event.deltaY > 0;
if ((scrollingForward && canJumpDown && !stopJumpDown) || (!scrollingForward && canJumpUp && !stopJumpUp)) {
event.preventDefault();
scrollToPage();
}
} else {
event.preventDefault();
}
});
}
$('.page').each(function() {
new ScrollHandler($(this));
})
* {
margin: 0;
padding: 0;
}
.page {
height: 100vh;
}
.one {
background-color: blue;
}
.two {
background-color: green;
}
.three {
background-color: orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page one"></div>
<div class="page two"></div>
<div class="page three"></div>
JSfiddle:https ://jsfiddle.net/fw8h7v4q/
推荐阅读
- report - GP Dynamics 报告编写器计算字段 RW_POPLINECommentText 未显示在一揽子 PO 上
- xamarin - 如何在 SKCanvasView 上徒手擦除?
- log4net - 我应该如何在 app.config 中配置 lot4net?
- wordpress - WordPress 和 Docker。尝试与 WP 控制台交互,包括更新问题
- r - 如何从r中的表中删除组?
- electron - 如何在 window-all-closed 事件中访问本地存储数据
- python-3.x - 无法识别的 hadoop 主要版本 1.2.1 错误 - 使用 jayadebeapi 的 Hive 和 impala jdbc 连接
- apache-kafka - 源连接器在 JSON 字段周围添加引号
- c# - 刷新 DEVICEMAP\SERIALCOMM 或获取设备管理器中可用的 COM
- ruby-on-rails - 根据过去的一个月 ruby on rails 6 创建整个月的记录,每个月