js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)


Posted in Javascript onJanuary 27, 2016

本文实例讲述了js实现的鼠标滚轮滚动切换页面效果的方法。分享给大家供大家参考,具体如下:

运行效果截图如下:

js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)

js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)

具体代码如下:

<!DOCTYPE html>
<html>
 <head>
  <title>wheel</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <script type="text/javascript" >
   var currentShowPageIndex = 0;
   var animateTimeout = null;
   var isWheelAnimating = false;
   var isWheelUp = function(event) {
    event = event || window.event;
    var up = true;
    if(event.wheelDelta){//IE/Opera/Chrome
     up = event.wheelDelta / 120 == 1 ? true : false;
    }else{//Firefox
     up = event.detail / 3 == 1 ? true : false;
    }
    return up;
   }
   var changeBar = function(prevIndex, index) {
    var barUl = document.getElementById('barUl');
    var barLiList = barUl.getElementsByTagName('li');
    barLiList[prevIndex].className = "";
    barLiList[index].className = "active"; 
   }
   var changePage = function(pageIndex) {
    var showPageUl = document.getElementById('wheelUl');
    changeBar(currentShowPageIndex, pageIndex);
    currentShowPageIndex = pageIndex;
    var left = -(currentShowPageIndex) * 1000;
    showPageUl.style.marginLeft = left + "px";
    return;
   }
   var animate = function(obj, mode, from, to){
    if(animateTimeout) {
     clearTimeout(animateTimeout);
    }
    if(mode == "left") {
     if(from > to) {
      from = from - 50;
      obj.style.marginLeft = (from) + "px";
      setTimeout(function(){
       animate(obj, mode, from, to);
      }, 30);
     } else {
        isWheelAnimating = false;
       }
     return;
    } 
    if(from < to) {
     from = from + 50;
     obj.style.marginLeft = (from) + "px";
     setTimeout(function(){
      animate(obj, mode, from, to);
     }, 30);
    } else {
       isWheelAnimating = false;
      }
   }
   var mouseWheel = function(event) { 
    if(isWheelAnimating) {
      return;
    }
    isWheelAnimating = true;
    var wheelUp = isWheelUp(event);
    var showPageUl = document.getElementById('wheelUl');
    var showPageUlWidth = parseInt(showPageUl.offsetWidth);
    var showPageLiList = showPageUl.getElementsByTagName('li');
    var showPageLiListLength = showPageLiList.length;
    var wheelWrapperLeft = parseInt(document.getElementById('wheelWrapper').offsetLeft);
    if(wheelUp && currentShowPageIndex < showPageLiListLength - 1) {
     changeBar(currentShowPageIndex, currentShowPageIndex + 1);
     currentShowPageIndex ++;
     var left = -(currentShowPageIndex) * 1000;
     //animate(showPageUl, "right", -(currentShowPageIndex - 1) * 1000, -(currentShowPageIndex - 1) * 1000);
     var from = -(currentShowPageIndex - 1) * 1000;
     var to = -(currentShowPageIndex) * 1000;
     animate(showPageUl, "left", from, to);
     return;
    }
    if(!wheelUp && currentShowPageIndex > 0) {
     changeBar(currentShowPageIndex, currentShowPageIndex - 1);
     currentShowPageIndex --;
     var from = -(currentShowPageIndex + 1) * 1000;
     var to = -(currentShowPageIndex) * 1000;
     animate(showPageUl, "right", from, to);
     return;
    } 
    isWheelAnimating = false;
   };
   if(document.addEventListener){
    document.addEventListener('DOMMouseScroll',function(event) { mouseWheel(event); },false);
   }
   document.onmousewheel = function(event) { mouseWheel(event); }
   window.onload = function(){
    var barUl = document.getElementById('barUl');
    var barLiList = barUl.getElementsByTagName('li');
    for(var i=0,length=barLiList.length; i<length; i++) {
     (function(index){
      barLiList[index].onclick = function(){
       changePage(index);
      };
     })(i);
    }
   }
  </script>
  <style type="text/css" >
   body { background:#494949; margin:0; }
   ul { list-style:none; margin:0; padding:0; }
   li { float:left;}
   #wheelWrapper {
    width:1000px; height:550px; margin:0 auto; 
    position:fixed; left:50%; margin-left:-505px;
    bottom:50px; overflow:hidden;
   }
   #wheelUl {
    width:5050px; height:500px;
   }
   #barUl {
    clear:both; margin:0 auto; width:550px;
    margin-top:20px; line-height:25px;
   }
   #barUl>li {
    width:100px; background:orange;
    height:25px; margin-right:10px;
    border-radius:5px; text-align:center;
    -webkit-border-radius:5px;
    -moz-border-radius:5px;
   }
   #barUl>li:hover {
    background:#C36C12;
   }
   #barUl>li[class=active] {
    background:#C36C12;
   }
   #wheelUl>li { width:1000px; }
   .wheel {
    width:994px; height:500px; background:#FAAA3C;
    border-radius:10px;
    -webkit-border-radius:10px;
    -moz-border-radius:10px;
    margin:0 auto;
    line-height:300px;
    font-size:100px;
    text-align:center;
   }
   .radius {
    border-radius:3px;
    -webkit-border-radius:3px;
    -moz-border-radius:3px;
   }
   h1 { text-align:center; color:#fff; }
  </style>
 </head>
 <body id="body">
  <h1 >ie8+,chrome,ff提供支持</h1>
  <div id="wrapper">
   <div id="wheelWrapper">
    <ul id="wheelUl" >
     <li >
      <div class="wheel">
       1_page1
      </div>
     </li>
     <li >
      <div class="wheel">
       2_page2
      </div>
     </li>
     <li >
      <div class="wheel">
       3_page3
      </div>
     </li>
     <li >
      <div class="wheel">
       4_page4
      </div>
     </li>
     <li >
      <div class="wheel">
       5_page5
      </div>
     </li>
    </ul>
    <ul id="barUl">
     <li class="active">
      1
     </li>
     <li>
      2
     </li>
     <li>
      3
     </li>
     <li>
      4
     </li>
     <li>
      5
     </li>
    </ul>
   </div>
  </div>
 </body>
</html>

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
简洁短小的 JavaScript IE 浏览器判定代码
Mar 21 Javascript
jquery 插件开发备注
Aug 27 Javascript
JS中令人发指的valueOf方法介绍
Feb 22 Javascript
JavaScript中常见的字符串操作函数及用法汇总
May 04 Javascript
JavaScript Date对象详解
Mar 01 Javascript
Actionscript与javascript交互实例程序(修改)
Sep 22 Javascript
js实现文字跑马灯效果
Feb 23 Javascript
Ionic + Angular.js实现图片轮播的方法示例
May 21 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
详解vue微信网页授权最终解决方案
Jun 16 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
canvas多重阴影发光效果实现
Apr 20 Javascript
AngularJS转换响应内容
Jan 27 #Javascript
jQuery+css实现的切换图片功能代码
Jan 27 #Javascript
javascript中的3种继承实现方法
Jan 27 #Javascript
jQuery+css实现的换页标签栏效果
Jan 27 #Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 #Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 #Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 #Javascript
You might like
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
使用SAE部署Python运行环境的教程
2015/05/05 Python
python生成二维码的实例详解
2017/10/29 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python配置文件写入过程详解
2019/10/19 Python
Python原始套接字编程实例解析
2020/01/29 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
求职推荐信范文
2013/12/01 职场文书
民事授权委托书范文
2014/08/02 职场文书
班级团队活动方案
2014/08/14 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
疾病证明书
2015/06/19 职场文书
python程序的组织结构详解
2021/12/06 Python