js全屏滚动

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{margin:0;padding:0;}
ul{list-style: none;}
.content{width: 100%;height: 100%;}

#nums{position: fixed;top: 100px;right: 100px;}
#nums li{width: 20px;height: 20px;border-radius: 50%;background: #fff;margin-bottom: 20px;}
#nums li.active{background: #333;}
</style>
</head>
<body>
<div class="wrap">
<div class="content" style="background: #f00;"></div>
<div class="content" style="background: #FFA500;"></div>
<div class="content" style="background: #00f;"></div>
<ul id="nums">

</ul>
</div>
<script type="text/javascript">
window.onload=function(){
gun()
tab()
}
function gun(){

//添加滚动监听
document.addEventListener(‘mousewheel‘,wheel,false);

//判断一次滚动是是否完成
var isComplete = true;
//隐藏滚动条
document.body.style.overflow=‘hidden‘;

//获取滚动的元素
var fullList = document.getElementsByClassName("content");

//因为是类数组对象,不是数组对象,所以只能使用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;
//使用运动框架
move(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;
var x=arrivePoint/window.innerHeight
//最大的滚动点
let maxBottom = document.body.offsetHeight - window.innerHeight;

//如果超出了最大的滚动点,则赋值为最大滚动点
arrivePoint = arrivePoint > maxBottom ? maxBottom : arrivePoint;

move(document.body,{‘scrollTop‘:arrivePoint},function(){
isComplete = true;
});
}else{
let arrivePoint = document.body.scrollTop - window.innerHeight;
var x=arrivePoint/window.innerHeight
//最小滚动点为0
arrivePoint = arrivePoint < 0 ? 0 :arrivePoint;
move(document.body,{‘scrollTop‘:arrivePoint},function(){
isComplete = true;
});
}
var li=document.getElementById(‘nums‘).getElementsByTagName(‘li‘)
if(x>=li.length){
x=li.length-1
}
if(x<0){
x=0
}
for(var i=0;i<li.length;i++){
li[i].className=""
}
li[x].className="active"
}
}
}
/*添加视图*/
function tab(){
var con=document.getElementsByClassName(‘content‘);
var num=document.getElementById(‘nums‘);
for(var i=0;i<con.length;i++){
var li=document.createElement(‘li‘)
num.appendChild(li)
}
num.getElementsByTagName(‘li‘)[0].className="active"
}
/*运动框架*/
//这就不多说了,js动画框架
function move(obj,json,fn){

clearInterval(obj.times);
var fl=true;
obj.times=setInterval(function(){
for(var attr in json){
var le=0;
if(attr=="opacity"){
le=Math.round(parseFloat(getStyle(obj,attr))*100);
}else if(attr=="scrollTop" || attr=="scrollLeft"){
le=obj[attr];
}else{
le=parseInt(getStyle(obj,attr))/*||obj[attr]*/;
}
var speed=(json[attr]-le)/10;
speed>0 ? speed=Math.ceil(speed) : speed=Math.floor(speed);
if(le!=json[attr]){
fl=false;
}else{
fl=true;
}
if(attr=="opacity"){
obj.style.filter=‘alpha(opacity:‘+(le+speed)+‘)‘;
obj.style.opacity=(le+speed)/100;
}else if(obj[attr]||obj[attr] == 0){
obj[attr] = le + speed;
}
else{
obj.style[attr]=le+speed+"px";
}
if(fl){
clearInterval(obj.times);
if(fn){
fn();
}
}
}
},20)
}
function getStyle(obj, attr)
{
if(obj.currentStyle)
{
return obj.currentStyle[attr];
}
else
{
return getComputedStyle(obj,false)[attr];
}
}
</script>
</body>
</html>

时间: 2024-11-08 21:36:46

js全屏滚动的相关文章

js全屏滚动效果

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>全屏滚动代码测试</title> 6 <style type="text/css"> 7 body,ul,li{ margin: 0; padding: 0;} 8 #tbody{ overflow: hidden; clear: both;

jquery.fullPage.js全屏滚动插件

效果演示 网站   http://www.51xuediannao.com/demo.php 插件下载  http://www.51xuediannao.com/js/jquery/jquery.fullPage.html jquery.fullPage.js是一个全屏滚动插件,本文提供jquery.fullPage实例教程演示 看啥都不如看演示来的直观,走起! 基本滚动 http://www.51xuediannao.com/js/jquery/jquery.fullPage/index2.h

FullPage.js全屏滚动插件学习总结

如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容,显得格外的高端大气上档次.比如 iPhone 5C 的介绍页面(查看),QQ浏览器的官网站.如果你也希望你的网站能设计成全屏的,显得更上档次,你可以试试 fullPage.js 主要功能有: 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触摸事件 支持 CSS3 动画 支持窗口缩放 窗口缩放时自动调整 可设置滚动宽度.背景颜色.滚动速度.循环选项.回调.文本对齐方式等等 实

fullPage.js全屏滚动插件API

API sectionsColor:['green','orange','red','lime']; //设置背景颜色 可以为每一个section设置background-color属性 controlArrows: 定义是否通过箭头来控制slide幻灯片,默认为true,当我们设置为false,则幻灯片左右的箭头消失,在移动端上我们可以通过滑动来控制幻灯片 verticalCentered: 每一页的内容是否垂直居中,默认为true resize: 字体是否随着窗口缩放而缩放,默认为false

JS - 全屏滚动

下载地址:http://www.lanrentuku.com/js/quanping-1141.html

关于最近在做的一个js全屏轮播插件

最近去面试了,对方要求我在一个星期内用原生的js代码写一个全屏轮播的插件,第一想法就是跟照片轮播很相似,只是照片轮播是有定义一个宽高度大小已经确定了的容器用来存储所有照片,然后将照片全部左浮动,利用margin-left的值不断变化,来改变显示哪张照片,当达到最后一张的时候,将第一张照片appendChild到最后一张照片的后面,如果有左右移动的话,当到达第一张照片时,还要继续左移动的话,就将最后一张照片利用insertBefore,将最后一张照片放在第一张照片的前面,这两个方法都只是改变子元素

全屏滚动效果H5FullscreenPage.js

前提: 介于现在很多活动都使用了 类似全屏滚动效果 尤其在微信里面 我自己开发了一个快速构建 此类项目的控件 与市面上大部分控件不同的是此控件还支持元素的动画效果 并提供多种元素效果 基于zepto.js 功能清单: 1 快速实现页面全屏滚动效果.并提供多种翻页效果,兼容大部分ios和android系统. 2 支持在页面中添加多种动画元素效果 来实现淡入,滑入等效果. 3 支持配置音乐功能. 4 支持摇一摇接口功能. 组件核心代码原理: 1 页面滚动 在移动页面上如果想使用滚动,如过没有任何动画

自己用js实现全屏滚动

参照fullPage.js的效果,用自己的想法实现的. 实现的效果:1.全屏滚动,滚动一下齿轮就会滚动全屏. 2.自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏. 下一步计划: 1.改成react组件 2.实现更多的效果 注释写的很清楚,基本上知道函数怎么用就可以了.有想法这东西就很简单. 这里偷懒使用了我之前写过的一个运动框架(其实就是一个函数),稍加修改就可以在这上面使用.框架相关:点击这里 注释非常详细了,就不说其他的了.直接上代码: 1 <!DOCTYPE html>

原生js实现全屏滚动

原生js实现全屏滚动(firefox兼容性问题还没解决) 最近发现刷前端在线简历,发现许多人都使用了全屏滚动特效 所以今天特意来实现一下 css样式:* { margin: 0; padding: 0;}h1 { width: 200px; height: 200px; margin: 0 auto;}div{ overflow: hidden; position: absolute;}.show { display: block;} /*第一页*/#one { background: red;