最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Javascript实现全屏滚动实例代码

来源:动视网 责编:小采 时间:2020-11-27 20:26:51
文档

Javascript实现全屏滚动实例代码

Javascript实现全屏滚动实例代码:JS 全屏滚动参照fullPage.js的效果,用自己的想法实现的。实现的效果:1、全屏滚动,滚动一下齿轮就会滚动全屏。2、自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏。下一步计划:1、改成react组件2、实现更多的效果注释写的很清楚,基本上
推荐度:
导读Javascript实现全屏滚动实例代码:JS 全屏滚动参照fullPage.js的效果,用自己的想法实现的。实现的效果:1、全屏滚动,滚动一下齿轮就会滚动全屏。2、自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏。下一步计划:1、改成react组件2、实现更多的效果注释写的很清楚,基本上


JS 全屏滚动

参照fullPage.js的效果,用自己的想法实现的。

实现的效果:1、全屏滚动,滚动一下齿轮就会滚动全屏。

2、自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏。

下一步计划:

1、改成react组件

2、实现更多的效果

注释写的很清楚,基本上知道函数怎么用就可以了。有想法这东西就很简单。

这里偷懒使用了我之前写过的一个运动框架(其实就是一个函数),稍加修改就可以在这上面使用。框架相关:点击这里

注释非常详细了,就不说其他的了。直接上代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>index</title>
</head>
<style>
 *{
 margin: 0;
 padding: 0;
 }
 div{
 width: 100%;
 height: 100%;
 }
 .one{
 background-color: #1bbc9b;
 }
 .sec{
 background-color: #4bbfc3;
 }
 .thr{
 background-color: #7baabe;
 }
</style>
<body>
 <div class="full one">1</div>
 <div class="full sec">2</div>
 <div class="full thr">3</div>
</body>
<script>
//添加滚动监听
document.addEventListener('mousewheel',wheel,false);
 
//判断一次滚动是是否完成
var isComplete = true;
//隐藏滚动条
document.body.style.overflow='hidden';
 
//获取滚动的元素
var fullList = document.getElementsByClassName("full");
 
//因为是类数组对象,不是数组对象,所以只能使用call的方式来调用
Array.prototype.forEach.call(fullList,function(value){
 //获取一个网页满屏的高
 value.style.height = window.innerHeight +'px';
})
 
//如果窗口大小改变执行的函数
window.onresize = function(){
 Array.prototype.forEach.call(fullList,function(value){
 value.style.height = window.innerHeight +'px';
 });
 
 //改变窗口大小后,应该仍是一个元素占满全屏
 if(document.body.scrollTop % window.innerHeight)
 {
 isComplete = false;
 //根据四舍五入判断滚动位置
 let tmp = Math.round(document.body.scrollTop / window.innerHeight)* window.innerHeight;
 
 //使用运动框架
 showAnimate(document.body,{'scrollTop':tmp},function(){
 isComplete = true;
 });
 }
};
 
//滚动函数
function wheel(e){
 //等待上一个滚动完成
 if(isComplete){
 
 //滚动进行时
 isComplete = false;
 
 //判断是往上滚动还是往下滚动
 if(e.wheelDelta < 0){
 //要滚动到的点
 let arrivePoint = document.body.scrollTop + window.innerHeight;
 
 //最大的滚动点
 let maxBottom = document.body.offsetHeight - window.innerHeight;
 
 //如果超出了最大的滚动点,则赋值为最大滚动点
 arrivePoint = arrivePoint > maxBottom ? maxBottom : arrivePoint;
 
 showAnimate(document.body,{'scrollTop':arrivePoint},function(){
 isComplete = true;
 });
 }else{
 let arrivePoint = document.body.scrollTop - window.innerHeight;
 
 //最小滚动点为0
 arrivePoint = arrivePoint < 0 ? 0 :arrivePoint; 
 showAnimate(document.body,{'scrollTop':arrivePoint},function(){
 isComplete = true; 
 });
 }
 }
}
/**
*函数作用:执行动画
*接受参数:obj(需要运动的DOM元素)
* json(需要改变的属性集合,json格式)
* fn(回调函数)
*/
function showAnimate(obj,json,fn){
 clearInterval(obj.timer);
 //表示运动是否都已经停止
 var flag = true;
 obj.timer=setInterval(function(){
 //循环json
 for(var i in json){
 if(i == 'opacity'){
 //获取透明度值,round四舍五入去除小数点
 var icur = Math.round(parseFloat(getStyle(obj,i))*100);
 }
 else{
 //获取属性值
 var icur = parseInt(getStyle(obj,i))||obj[i];
 }
 //缓冲运动,speed随时变换
 var speed = (json[i]-icur)/10;//千万要写在定时器里面,写在外面会有意想不到的后果
 speed = speed > 0 ? Math.ceil(speed):Math.floor(speed);//速度向上或者下取整,防止到不了over位置
 //如果有一个没到达终点就是false
 if(json[i] !== icur){
 flag = false;
 }else{
 flag = true;
 }
 if(i == 'opacity'){
 obj.style.filter = 'alpha(opacity:'+(icur+speed)+')';//IE兼容
 obj.style.opacity = (icur+speed)/100;
 }else if(obj[i]||obj[i] == 0){
 obj[i] = icur + speed;
 }
 else{
 obj.style[i] = icur+speed+'px';
 }
 console.log(icur + ' ' + json[i]);
 }
 //检查是否所有的运动都已经停止
 if(flag){
 clearInterval(obj.timer);
 if(fn){
 fn();
 }
 }
 },13);
}
/**
*函数作用:返回样式属性值
*接受参数:obj(需要获取属性的DOM元素)
* attr(需要获取的属性名称)
*/
function getStyle(obj,attr)
{
 if(obj.currentStyle)
 {
 return obj.currentStyle[attr];//IE兼容
 }
 else
 {
 return getComputedStyle(obj,false)[attr];
 }
}
</script>
</html>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Javascript 实现全屏滚动实例代码相关文章请关注PHP中文网!

文档

Javascript实现全屏滚动实例代码

Javascript实现全屏滚动实例代码:JS 全屏滚动参照fullPage.js的效果,用自己的想法实现的。实现的效果:1、全屏滚动,滚动一下齿轮就会滚动全屏。2、自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏。下一步计划:1、改成react组件2、实现更多的效果注释写的很清楚,基本上
推荐度:
标签: 实现 js 案例
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top