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 相关文章推荐
jQuery之自动完成组件的深入解析
Jun 19 Javascript
js中style.display=&quot;&quot;无效的解决方法
Oct 30 Javascript
BOM系列第二篇之定时器requestAnimationFrame
Aug 17 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
JavaScript鼠标特效大全
Sep 13 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
JS实现隔行换色的表格排序
Mar 27 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 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
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
python读写文件操作示例程序
2013/12/02 Python
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
django实现前后台交互实例
2017/08/07 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
2014年仓管员工作总结
2014/11/18 职场文书
会议邀请函
2015/01/30 职场文书
环境建议书
2015/02/04 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
MongoDB 常用的crud操作语句
2021/06/20 MongoDB