Javascript 实现全屏滚动实例代码
发布时间 - 2026-01-10 22:14:10 点击率:次JS 全屏滚动

参照fullPage.js的效果,用自己的想法实现的。
实现的效果:1、全屏滚动,滚动一下齿轮就会滚动全屏。
2、自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏。
下一步计划:
1、改成react组件
2、实现更多的效果
注释写的很清楚,基本上知道函数怎么用就可以了。有想法这东西就很简单。
这里偷懒使用了我之前写过的一个运动框架(其实就是一个函数),稍加修改就可以在这上面使用。框架相关:点击这里
注释非常详细了,就不说其他的了。直接上代码:
<!DOCTYPE html>
<html lang="en">
<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>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JS
# 全屏滚动
# Javascript
# 全屏滚动实现代码
# 全屏滚动实例代码
# 原生javascript实现的全屏滚动功能示例
# JavaScript全屏和退出全屏事件总结(附代码)
# fullPage.js和CSS3实现全屏滚动效果
# 原生js实现类似fullpage的单页/全屏滚动
# JS实现全屏的四种写法
# jQuery插件fullPage.js实现全屏滚动效果
# JS 全屏和退出全屏详解及实例代码
# 全屏滚动插件fullPage.js使用实例解析
# 浅谈javascript控制HTML5的全屏操控
# 浏览器兼容的问题
# js实现各浏览器全屏代码实例
# 全屏
# 就可以
# 自己的
# 占满
# 就会
# 四舍五入
# 会有
# 在这
# 其他的
# 希望能
# 点击这里
# 很简单
# 仍是
# 很清楚
# 谢谢大家
# 往下
# 往上
# 写在
# 回调
# 写过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android 常见的图片加载框架详细介绍
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
PHP正则匹配日期和时间(时间戳转换)的实例代码
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
香港服务器租用每月最低只需15元?
实例解析angularjs的filter过滤器
制作公司内部网站有哪些,内网如何建网站?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel如何使用Blade组件和插槽?(Component代码示例)
三星网站视频制作教程下载,三星w23网页如何全屏?
如何快速查询域名建站关键信息?
Python文本处理实践_日志清洗解析【指导】
微信小程序 require机制详解及实例代码
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
中国移动官方网站首页入口 中国移动官网网页登录
如何在万网ECS上快速搭建专属网站?
JavaScript如何实现路由_前端路由原理是什么
如何在 React 中条件性地遍历数组并渲染元素
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
zabbix利用python脚本发送报警邮件的方法
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何在局域网内绑定自建网站域名?
用yum安装MySQLdb模块的步骤方法
制作企业网站建设方案,怎样建设一个公司网站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在香港免费服务器上快速搭建网站?
如何彻底删除建站之星生成的Banner?
如何在建站宝盒中设置产品搜索功能?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
如何用狗爹虚拟主机快速搭建网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何快速上传自定义模板至建站之星?
Laravel怎么实现验证码(Captcha)功能
怎么用AI帮你为初创公司进行市场定位分析?
西安专业网站制作公司有哪些,陕西省建行官方网站?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
nginx修改上传文件大小限制的方法
如何在阿里云虚拟服务器快速搭建网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
魔方云NAT建站如何实现端口转发?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
nodejs redis 发布订阅机制封装实现方法及实例代码
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)

