亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery插件windowScroll實現單屏滾動特效

2019-11-20 12:03:31
字體:
來源:轉載
供稿:網友

回首望,曾經洋洋得意的代碼現在不忍直視。曾經看起來碉堡的效果現在也能稍微弄點出來。社會在往前發展,人也不得不向前走。

      參考于搜狗瀏覽器4.2版本首頁的上下滾動效果。主要實現整個窗口的上下和左右滾動邏輯,還有很多可以拓展的空間。希望大家能多提意見與建議。

      代碼如下:

HTML

<!doctype html><html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta content="" name="keywords" /><meta content="" name="description" /><meta name="author" content="codetker" /><head><title>window對象滾動插件</title><link href="style/reset.css" rel="stylesheet" type="text/css"><link href="style/style.css" rel="stylesheet" type="text/css"><script type="text/javascript" src="js/jquery-1.9.1.min.js"></script><script type="text/javascript" src="js/jquery.codetker.windowScroll.js"></script></head><body scroll="no">  <div class="wrap" style="dispaly:block;">    <div class="stageControl">      <ul>        <li>stage1</li>        <li>stage2</li>        <li>stage3</li>        <li>stage4</li>        <li>stage5</li>      </ul>    </div>    <div class="stage stage1">      <div class="pageControl">        <ul>          <li>page1</li>          <li>page2</li>          <li>page3</li>        </ul>      </div>      <div class="page page1"></div>      <div class="page page2"></div>      <div class="page page3"></div>      </div>    <div class="stage stage2"></div>    <div class="stage stage3"></div>    <div class="stage stage4"></div>    <div class="stage stage5"></div>  </div><script type="text/javascript">  $(document).ready(function(){    $(".wrap").windowScroll({      'choose' : 0,      'verticalSpeed' : 2, //控制垂直滾動速度      'horizontalSpeed' : 1,      'objControlUl': '.wrap .stageControl'    });    $(".stage1").windowScroll({      'choose': 1,      'verticalSpeed' : 1,      'horizontalSpeed' : 1,//控制水平滾動速度      'objControlUl': '.stage1 .pageControl'    });  });</script></body></html>

CSS

@charset "utf-8";/* CSS Document */body{  margin:0 0;  padding:0 0;  height:100%;  width:100%;  overflow: hidden;;}.wrap{  font-family:"微軟雅黑","宋體", Times, "Times New Roman", serif;  font-size:14px;  margin:0 0;  padding:0 0;  height:100%;  width:100%;  overflow:hidden;}.stage,.page{  width: 100%;  height: 100%;}.stage1{  background-color:red;}.stage2{  background-color:#fff;}.stage3{  background-color:yellow;}.stage4{  background-color:green;}.stage5{  background-color:blue;}.page{  float: left;}.page2{  background-color: #666;}.page3{  background-color: #ddd;}.stageControl{  position: fixed;}.stageControl ul li{  width: 100px;  height: 30px;  line-height: 30px;  text-align: center;  cursor: pointer;}.stageControl ul li:hover{  color: blue;}.pageControl{  position: fixed;  left: 200px;}.pageControl ul li{  float: left;  width: 50px;  height: 25px;  line-height: 25px;  text-align: center;  cursor: pointer;}.pageControl ul li:hover{  color: blue;}

JavaScript

/* * windowScroll 0.1 * window滾動插件,上下左右,可選擇是否回彈。參考搜狗歡迎頁面 * 兼容IE,FF,Chrome等常見瀏覽器 * 借鑒搜狗4.2版http://ie.sogou.com/features4.2.html */ ;(function($,window,document,undefined){   //定義構造函數   var WindowObj=function(ele,opt){     this.$element=ele; //最外層對象     this.defaults={       'choose' : 0,//默認為上下       'verticalSpeed' : 1,       'horizontalSpeed' : 1,       'objControlUl': null     },        this.options=$.extend({},this.defaults,opt );    //阻止默認行為和冒泡,這里可以定義多個方法都要用到的函數    this.stopDefaultAndBubble=function(e){      e=e||window.event;      if (e.preventDefault) {        e.preventDefault();      }      e.returnValue=false;      if (e.stopPropagation) {        e.stopPropagation();      }      e.cancelBubble=true;    }    this.setSize=function(ele){      $(ele).css({        'width':$(window).outerWidth()+'px'      });      //自動判斷元素是否存在,對undefined賦css屬性無意義      $(ele).children('.stage').css({        'width':$(window).outerWidth()+'px',        'height':$(window).outerHeight()+'px'      });      $(ele).children('.page').css({        'width':$(window).outerWidth()+'px',        'height':$(window).outerHeight()+'px'      });    }   }   //給構造函數添加方法   WindowObj.prototype={     //上下滾動的方法     verticalMove:function(){       var obj=this.$element; //最外層對象       var speed=this.options.verticalSpeed;       var objControl=this.options.objControlUl;//控制按鈕       var windowHeight=$(window).height();       var list=$(obj).children('.stage');       var listMax=$(list).length;       var is_chrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1;       if(is_chrome){         //判斷webkit內核,供scrollTop兼容性使用         windowobject='body';       }else{         //支持IE和FF         windowobject='html';       }       var stop=0;       //均設置為windows大小       this.setSize(obj);       //得到當前的垂直位置       var stageIndex;       function getIndex(){         stageIndex=Math.round($(window).scrollTop()/windowHeight);       }        //綁定鍵盤上下按鍵事件       $(document).keydown(function(event) {         /* 綁定keycode38,即向上按鈕 */         if (event.keyCode==38) {           getIndex();          setTimeout(function(){            scrollStage(windowobject,stageIndex,1); //stageIndex為當前頁碼          },100);         }else if (event.keyCode==40) {//綁定40,即向下按鈕           getIndex();          setTimeout(function(){            scrollStage(windowobject,stageIndex,-1); //stageIndex為當前頁碼          },100);         }       });       //綁定滑輪功能的函數       function handle(delta){         getIndex();        if (delta<0) {          setTimeout(function(){            scrollStage(windowobject,stageIndex,-1); //stageIndex為當前頁碼          },100);        }else{          setTimeout(function(){            scrollStage(windowobject,stageIndex,1); //stageIndex為當前頁碼          },100);        }       }       //判斷滑輪,解決兼容性       function wheel(event){        var delta = 0;        if (!event) event = window.event;        if (event.wheelDelta) {          delta = event.wheelDelta;           if (window.opera) delta = -delta;        } else if (event.detail) {          delta = -event.detail;        }        if (delta)          handle(delta); //調用執行函數      }       //注冊事件       if (window.addEventListener) {         window.addEventListener('DOMMouseScroll', wheel, false);       }       window.onmousewheel = document.onmousewheel = wheel;              //綁定鼠標滾輪事件       $(document).bind('mousedown', function(event) {         if (e.which==2) {//which=2代表鼠標滾輪,即為中鍵           this.stopDefaultAndBubble(e);           //bugfix 搜狗瀏覽器的ie內核只有在定時器觸發這個函數才生效           setTimeout(function(){             this.stopDefaultAndBubble(e);           },10);         }       });       //如果有ul li控制按鈕       if (objControl!=null) {         $(objControl).delegate('li', 'click', function() {           stageIndex=$(this).index();           setTimeout(function(){             scrollStage(windowobject,stageIndex,0);           },100);         });       }       function scrollStage(obj,stIndex,dir){//如果用scrollStage=function來指定的話沒有聲明提前,然后就會找不到這個函數了         //obj為操作滾動的對象        //stIndex為點擊調用時應該滾動到的頁面頁碼,按鍵和滾輪調用時默認為1(傳入0)        //dir傳入滾動時的方向,0代表不滾動,1代表向上,-1代表向下        var sIndex=stIndex;//!(dir)則stageIndex為要到的頁碼,否則為當前頁碼        var windowobject=obj;        var direction=0||dir; //接收參數封裝,沒有傳入時暫時認為為0        var target=windowHeight*sIndex; //目標頁面距離文檔頂部距離               if ( !$(windowobject).is(':animated') ) {//當沒有在滾動時          if(!direction){ ////響應guider,此時stageIndex為目標頁面頁碼            if ($(window).scrollTop() > target) { //內容下移,窗口上移,上方出現彈痕              direction=-1;              $(windowobject).animate({                "scrollTop": target +"px"              },1000*speed,function(){                crash_bottom(1,target,20,150); //調用撞擊函數,先撞頂部,target變成當前頁面了              });            }else if($(window).scrollTop() == windowHeight*sIndex){ //當前頁面時              direction=0;              crash_bottom(1, target ,20,150); //模擬撞底部            }else{              direction=1;              $(windowobject).animate({                "scrollTop": target +"px"              },1000*speed,function(){                crash(1,target,20,150); //調用撞擊函數,先撞底部              });            }          }else{//響應鼠標滾輪和鍵盤上下,sindex為當前頁面            if(direction==1){              if(sIndex==0){                crash(1,target,20,150);              }else{ //往上翻                sIndex-=1;                $(windowobject).animate({                  "scrollTop":windowHeight*sIndex+"px"                  },1000*speed,function(){                    crash_bottom(1,windowHeight*sIndex,20,150); //調用撞擊函數,往下翻內容往上,先撞頂部                  }                );              }            }else{              if(sIndex==listMax){                crash_bottom(1,target,20,150);              }else{ //往下翻                sIndex+=1;                $(windowobject).animate({                  "scrollTop":windowHeight*sIndex+"px"                },1000*speed,function(){                  crash(1,windowHeight*sIndex,20,150); //調用撞擊函數,往上翻內容往下,先撞底部                });              }            }          }        }       }      //撞擊函數      function crash_bottom(direction,termin,distant,time){        if (!stop) {          var scrollTop=$(window).scrollTop();          if (direction==1) {            direction=0;            $(windowobject).animate({"scrollTop":"+="+distant+"px"},time,function(){              crash_bottom(direction,termin,distant*0.6,time);              if (distant<=15||time>150) {                stop=1;//停止碰撞                $(windowobject).animate({"scrollTop":termin+"px"},time,function(){                  stop=0;                });              }            });          }else if (direction==0) {            direction=1;            $(windowobject).animate({"scrollTop":termin+"px"},time,function(){              crash_bottom(direction,termin,distant*0.6,time);              if (distant<=15||time>150) {                stop=1;//停止碰撞                $(windowobject).animate({"scrollTop":termin+"px"},time,function(){                  stop=0;                });              }            });          }        }      }      function crash(direction,termin,distant,time){        if (!stop) {          var scrollTop=$(window).scrollTop();          if (direction==1) {            direction=0;            $(windowobject).animate({"scrollTop":"-="+distant+"px"},time,function(){              crash(direction,termin,distant*0.6,time);              if (distant<=15||time>150) {                stop=1;//停止碰撞                $(windowobject).animate({"scrollTop":termin+"px"},time,function(){                  stop=0;                });              }            });          }else if (direction==0) {            direction=1;            $(windowobject).animate({"scrollTop":termin+"px"},time,function(){              crash(direction,termin,distant*0.6,time);              if (distant<=15||time>150) {                stop=1;//停止碰撞                $(windowobject).animate({"scrollTop":termin+"px"},time,function(){                  stop=0;                });              }            });          }        }      }     },     //左右滾動的方法     horizontalMove:function(){       var obj=this.$element; //最外層對象       var speed=this.options.horizontalSpeed;       var objControl=this.options.objControlUl;//控制按鈕       var windowWidth=$(window).width();       var list=$(obj).children('.page');       var listMax=$(list).length;       var is_chrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1;       if(is_chrome){         //判斷webkit內核,供scrollTop兼容性使用         windowobject='body';       }else{         //支持IE和FF         windowobject='html';       }       var stop=0;       //均設置為windows大小       this.setSize(obj);       $(obj).css({'width':windowWidth*listMax+'px'});       var pageIndex; //當前頁面頁碼(負數)      function getPageIndex(){        pageIndex=Math.round(parseInt($(obj).css("margin-left")) / windowWidth);      }      //綁定鍵盤左右按鍵事件      $(document).keydown(function(event){        //判斷event.keyCode為39(即向右按鈕)        if (event.keyCode==39) {          getPageIndex();          scrollPage($(obj),pageIndex,-1);         }        //判斷event.keyCode為37(即向左按鈕        else if (event.keyCode==37) {          getPageIndex();          scrollPage($(obj),pageIndex,1);        }      });      //如果有ul li控制按鈕       if (objControl!=null) {         $(objControl).delegate('li', 'click', function() {           pageIndex=$(this).index();           setTimeout(function(){             scrollPage(obj,pageIndex,0);           },100);         });       }      function scrollPage(obje,pIndex,dir){        var windowobject=obje;        var direction=0||dir;        var pageIndex=pIndex;        var dist=Math.round(parseInt($(obj).css("margin-left"))); //當前頁距離左邊的margin(負值)        var aim=pageIndex*windowWidth*(-1);        if (!$(windowobject).is(":animated")) {          if(!direction){ //響應nav            if (dist != aim) { //此時pageIndex為yearID.非負值              $(windowobject).animate({"margin-left": aim + "px"},                1000*speed);            }else{              direction=0;              $(windowobject).animate({"margin-left":"+="+"50px"},500).animate({"margin-left":"-="+"100px"},500).animate({"margin-left":"+="+"50px"},500);            }          }else{ //響應鍵盤左右鍵            if(direction==1){ //pageIndex為負值              if(pageIndex==0){                $(windowobject).animate({"margin-left":"+="+"50px"},500).animate({"margin-left":"-="+"100px"},500).animate({"margin-left":"+="+"50px"},500);                }else{                pageIndex+=1; //顯示左邊內容,左鍵                $(windowobject).animate({"margin-left":"+=" + windowWidth + "px"},                  1000*speed);              }            }else{              if(pageIndex== ((-1)*(listMax-1))){                $(windowobject).animate({"margin-left":"-="+"50px"},500).animate({"margin-left":"+="+"100px"},500).animate({"margin-left":"-="+"50px"},500);                }else{                pageIndex-=1;                $(windowobject).animate({"margin-left":"-=" + windowWidth + "px"},                  1000*speed);              }                                        }          }        }      }     }   }   //在插件中使用windowObj對象的方法,0為vertical,1為horizontal   $.fn.windowScroll=function(options){     //創建實體     var windowObj=new WindowObj(this,options);     //根據選擇調用方法     if (windowObj.options.choose==0) {       return windowObj.verticalMove();     }else if(windowObj.options.choose==1){       return windowObj.horizontalMove();     }else{//2之后的留擴展吧       //add some functions     }   } })(jQuery,window,document);

詳細的代碼下載見https://github.com/codetker/myWindowScroll

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本视频久久久| 亚洲人成人99网站| 羞羞色国产精品| 美女视频黄免费的亚洲男人天堂| 欧美在线视频观看| 成人激情av在线| 免费不卡欧美自拍视频| 日韩精品欧美国产精品忘忧草| 久久久免费在线观看| 国产激情综合五月久久| 亚洲免费伊人电影在线观看av| 不卡毛片在线看| 国产精品99一区| 欧美性高跟鞋xxxxhd| 粉嫩av一区二区三区免费野| 日韩亚洲综合在线| 欧美超级免费视 在线| 日韩精品免费视频| 不卡av电影在线观看| 中文字幕亚洲欧美日韩在线不卡| 国产精品18久久久久久麻辣| 日韩中文字幕在线免费观看| 亚洲一区二区日本| 色噜噜久久综合伊人一本| 国产视频精品久久久| 精品国内亚洲在观看18黄| 久久影视电视剧免费网站| 亚洲国产女人aaa毛片在线| 91深夜福利视频| 精品国产乱码久久久久久天美| 亚洲春色另类小说| 国产成人亚洲综合| 国产精品免费一区二区三区都可以| 亚洲美女又黄又爽在线观看| 这里只有精品久久| 韩国美女主播一区| 欧美午夜片在线免费观看| 97超碰蝌蚪网人人做人人爽| 久久精品视频中文字幕| 国内免费精品永久在线视频| 国内精品美女av在线播放| 91亚洲国产成人精品性色| 欧美有码在线观看视频| 亚洲一区二区精品| 日韩一区二区精品视频| 日韩精品极品毛片系列视频| 欧美网站在线观看| 午夜精品久久久久久99热| 欧美国产日本在线| 国产精品亚洲一区二区三区| 爽爽爽爽爽爽爽成人免费观看| 欧美成人免费网| 少妇高潮久久77777| 狠狠干狠狠久久| 国产精品视频自在线| 亚洲成色777777在线观看影院| 亚洲国产精品va在线看黑人| 韩国三级日本三级少妇99| 日韩美女福利视频| 久久成人免费视频| 久久影院中文字幕| 国产午夜精品视频免费不卡69堂| 国内精品模特av私拍在线观看| 日韩高清电影免费观看完整版| 国产精品极品尤物在线观看| 国产精品69精品一区二区三区| 精品久久久久久久久中文字幕| 国模叶桐国产精品一区| 国产精品流白浆视频| 成人淫片在线看| 性欧美xxxx视频在线观看| 亚洲精品aⅴ中文字幕乱码| 欧美激情2020午夜免费观看| 亚洲人成电影网站色…| 欧美一级免费看| 国产精品免费观看在线| 欧美中文字幕第一页| 久久中文精品视频| 中文字幕日韩视频| 欧美一区第一页| 亚洲福利影片在线| 色视频www在线播放国产成人| 中文字幕国产亚洲2019| 久久久99免费视频| 九九久久精品一区| 亚洲精品视频播放| 中文字幕精品久久久久| 欧美综合一区第一页| 亚洲图片在线综合| 精品国产一区二区三区久久| 国产综合香蕉五月婷在线| 一区二区成人av| 欧美肥老太性生活视频| 久久久成人精品| 久久人人爽人人爽爽久久| 久久69精品久久久久久久电影好| 一区二区国产精品视频| 最新69国产成人精品视频免费| 欧美天天综合色影久久精品| 91亚洲精品久久久久久久久久久久| 在线精品高清中文字幕| 97超碰色婷婷| 亚洲一级黄色片| 亚洲精品免费av| 日韩va亚洲va欧洲va国产| 国产欧美 在线欧美| 超碰日本道色综合久久综合| 日本中文字幕不卡免费| 亚洲欧美制服另类日韩| 亚洲男人天堂久| 亚洲的天堂在线中文字幕| 色偷偷88888欧美精品久久久| 亚洲精品视频免费在线观看| 欧美激情高清视频| 亚洲理论片在线观看| 欧美成人久久久| 亚洲欧美制服第一页| 亚洲美女av网站| 欧美精品999| 亚洲电影免费观看高清完整版| 欧美亚洲成人精品| 最近2019中文字幕一页二页| 日韩高清电影好看的电视剧电影| 一本色道久久88亚洲综合88| 国产va免费精品高清在线观看| 欧美成人自拍视频| 亚洲色图五月天| 2018日韩中文字幕| 在线视频欧美日韩| 国产成人精品免费久久久久| 亚洲在线免费观看| 久久综合免费视频影院| 九九热精品视频| 亚洲国产精品久久91精品| 97人洗澡人人免费公开视频碰碰碰| 亚洲人成电影在线| 中文字幕免费精品一区| 91国产高清在线| 国产精品扒开腿爽爽爽视频| 亚洲欧美日韩一区二区三区在线| 伊人久久久久久久久久久久久| 国内精品久久久久伊人av| 亚洲成人精品视频在线观看| 国产美女91呻吟求| 欧美在线www| 国产欧美日韩免费看aⅴ视频| 久久久噜久噜久久综合| 亚洲免费伊人电影在线观看av| 日本亚洲欧洲色α| 久久精品视频播放| 国产精品丝袜久久久久久不卡| 欧美激情一区二区三区在线视频观看| 啪一啪鲁一鲁2019在线视频| 日韩欧美国产一区二区| 欧美激情综合亚洲一二区| 国产精品久久久久7777婷婷| 欧美电影在线观看网站| 性欧美视频videos6一9| 亚洲欧美中文日韩v在线观看| 91av网站在线播放| 亚洲自拍偷拍网址| 日韩中文字幕免费| 国内精品美女av在线播放| 欧美成人国产va精品日本一级|