全屏滚动的原理及实现

之前用fullpage插件做过全屏滚动的页面,今天用js自己实现了一下,还蛮简单的.

首先html结构为

[html] view plain copy

  1. <div id="wrap">
  2. <div id="main">
  3. <div id="page1" class="page"></div>
  4. <div id="page2" class="page"></div>
  5. <div id="page3" class="page"></div>
  6. <div id="page4" class="page"></div>
  7. </div>
  8. </div>

wrap块为窗口可看到的部分,我们可以通过js获取窗口可视区的大小,并为其设置overflow: hidden属性,使得窗口不出现滚动条,只显示窗口大小的一页内容;

设置main定位为relative,通过改变main块的top属性实现不同页面的切换,具体的css代码如下:

[css] view plain copy

  1. html,body{
  2. margin: 0;
  3. padding: 0;
  4. }
  5. #wrap{
  6. width: 100%;
  7. overflow: hidden;
  8. background: #ccc;
  9. }
  10. #main{
  11. width: 100%;
  12. background: #ccc;
  13. position: relative;
  14. }
  15. .page{
  16. width:100%;
  17. margin:0;
  18. }
  19. #page1{
  20. background:#E4E6CE;
  21. }
  22. #page2{
  23. background:#6CE26C;
  24. }
  25. #page3{
  26. background:#BF4938;
  27. }
  28. #page4{
  29. background:#2932E1;
  30. }

js代码的主要部分就是对滚动事件的函数绑定,大多数浏览器提供了 “mousewheel” 事件,Firefox 3.5+不支持,但支持相同作用的事件:”DOMMouseScroll”;

mousewheel事件“event.wheelDelta” 属性值:返回的如果是正值说明滚轮是向上滚动;

DOMMouseScroll事件“event.detail” 属性值:返回的如果是负值说明滚轮是向上滚动;每页高度为document.body.clientHeight+’px’;

具体代码如下:

[javascript] view plain copy

  1. var pages = document.getElementsByClassName("page");
  2. var wrap = document.getElementById("wrap");
  3. var len = document.documentElement.clientHeight;
  4. var main = document.getElementById("main");
  5. wrap.style.height = len + "px";
  6. for(var i=0; i<pages.length; i++){
  7. pages[i].style.height = len + "px";
  8. }
  9. if(navigator.userAgent.toLowerCase().indexOf("firefox") != -1){
  10. document.addEventListener("DOMMouseScroll",scrollFun);
  11. }else if(document.addEventListener){
  12. document.addEventListener("mousewheel",scrollFun,false);
  13. }else if(document.attachEvent){
  14. document.attachEvent("onmousewheel",scrollFun);
  15. }else{
  16. document.onmousewheel = scrollFun;
  17. }
  18. var startTime = 0;
  19. var endTime = 0;
  20. var now = 0;
  21. function scrollFun(e){
  22. startTime = new Date().getTime();
  23. var event = e || window.event;
  24. var dir = event.detail || -event.wheelDelta;
  25. if(startTime - endTime > 1000){
  26. if(dir>0 && now > -3*len){
  27. now -= len;
  28. main.style.top = now +"px";
  29. endTime = new Date().getTime();
  30. }else if(dir<0 && now < 0){
  31. now += len;
  32. main.style.top = now +"px";
  33. endTime = new Date().getTime();
  34. }
  35. }else{
  36. event.preventDefault();
  37. }
  38. }

原文地址:https://www.cnblogs.com/mm2015/p/9095212.html

时间: 2024-11-09 17:13:08

全屏滚动的原理及实现的相关文章

全屏滚动效果H5FullscreenPage.js

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

AlloyTouch全屏滚动插件发布

原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 演示地址也可以点击这里. 插件代码可以在这里找到. 注意,虽然是扫码体验,但是AlloyTouch.FullPage特意对鼠标滚轮事件进行了兼容,所以PC上的全屏滚动页面也可以使用它来快速制作. 使用姿势 在设计全屏滚动插件的时候,希望开发者几乎: 不用写任何脚本快速生成精致H5 支持PC滚轮和移动触摸 酷炫的转场动效 灵活的时间轴管理

onepage scorll全屏滚动插件

onepage scorll全屏滚动插件,它能够很方便.很轻松的制作出单页/全屏滚动页面.兼容主流浏览器,懒人图库推荐下载! 使用方法: 1.head区域引用文件onepage-scroll.css,jquery.min.js,jquery.onepage-scroll.min.js及以下样式 .page1 { } .page2 { background-color: #FF7F50;} .page3 { } .page4 { background-color: #f90;} p.title {

自己用js实现全屏滚动

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

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

原生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;

fullpage.js jq全屏滚动插件

fullPage.js和fullPage都能实现全屏滚动,二者区别是:fullPage.js需依赖于JQuery库,而fullPage不需要依赖任何一个js库,可以单独使用. (代码演示效果并且可以下载查看http://www.dowebok.com/77.html) 一.fullPage.js实现全屏 fullPage.js是开源的JQuery插件库,其Github地址:https://github.com/alvarotrigo/fullPage.js 1.基本演示 1.1 引入文件 <!-

使用fullPage做的大图片全屏滚动

本地的图片和css等文件 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>fullPage.js - 背景演示_dowebok</title> <!--网页的链接css <link rel="stylesheet" href="http://cdn.dowe