全屏滚动的原理是什么?用到了css的哪些属性?(笔试题)

在学习ES6知识点时,看到了fullpage.js,可以实现全屏滚动,也就是类似于幻灯片或者轮播图的效果。

//html结构
<div id="wrap">
	<div id="main">
		<div id="page1" class="page"></div>
		<div id="page2" class="page"></div>
		<div id="page3" class="page"></div>
		<div id="page4" class="page"></div>
	</div>
</div>

wrap块为窗口可看到的部分,我们可以通过js获取窗口可视区的大小,并为其设置为:overflow:hidden属性,使得窗口不出现滚动条,只显示窗口大小的一页内容。
设置main区域,定位为relative,通过改变main块的top属性实现不同页面的切换,具体的css代码如下:

html,body{
	margin:0;
	padding:0;
}
#wrap{
	width:100%;
	overflow:hidden;
	background:#111;
}
#main{
	width:100%;
	background:#222;
	position:relative;
}
.page{
	width:100%;
	margin:0;
}

js代码的主要部分就是对滚动事件的函数绑定,大多数浏览器提供了mousewheel事件,Firefox 3.5+不支持,但支持相同作用的事件:DOMMouseScroll;
mousewheel事件:event.wheelDelta 返回的如果时正值说明滚轮是向上滚动的;
DOMMouseScroll事件:event.detail 返回的如果时负值说明滚轮是向上滚动,每页高度为 document.body.clientHeight+px;
具体代码如下:

var pages = document.getElementsByClassName('page');
var wrap = document.getElementById('wrap');
var len = document.documentElement.clientHeight;
var main = document.getElementById('main');
wrap.style.height=len+"px";
for(var i=0;i<pages.length;i++){
	pages[i].style.height=len+"px";
}
if(navigator.userAgent.toLowerCase().indexOf('firefox') !=-1){
	document.addEventListener("DOMMouseScroll",scrollFun);
}else if(document.addEventListener){
	document.addEventListener("mousewheel",scrollFun,false);
}else if(document.attachEvent){
	document.attachEvent("onmousewheel",scrollFun);
}else{
	document.onmousewheel=scrollFun;
}
var startTime = 0;
var endTime = 0;
var now = 0;
function scrollFun(e){
	startTime = new Date().getTime();
	var event = e || window.event;
	var dir = event.detail || -event.wheelDelta;
	if(startTime - endTime > 1000){
		if(dir>0 && now > -3*len){
			now -= len;
			main.style.top = now + "px";
			endTime = new Date().getTime();
		}else if(dir<0 && now < 0){
			now += len;
			main.style.top=now+"px";
			endTime=new Date().getTime();
		}
	}else{
		event.preventDafault();
	}
}

注:以上内容参考其他大神代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶浩成520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值