国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

jQuery插件windowScroll實(shí)現(xiàn)單屏滾動(dòng)特效

2024-05-06 16:23:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文給大家分享的是一個(gè)使用jQuery插件windowScroll實(shí)現(xiàn)的單屏滾動(dòng)的特效,主要參考搜狗瀏覽器4.2版本首頁(yè)的上下滾動(dòng)效果。主要實(shí)現(xiàn)整個(gè)窗口的上下和左右滾動(dòng)邏輯,非常的實(shí)用。

回首望,曾經(jīng)洋洋得意的代碼現(xiàn)在不忍直視。曾經(jīng)看起來(lái)碉堡的效果現(xiàn)在也能稍微弄點(diǎn)出來(lái)。社會(huì)在往前發(fā)展,人也不得不向前走。

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

代碼如下:

HTML

 

 
  1. <!doctype html> 
  2. <html> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <meta content="" name="keywords" /> 
  5. <meta content="" name="description" /> 
  6. <meta name="author" content="codetker" /> 
  7. <head> 
  8. <title>window對(duì)象滾動(dòng)插件</title> 
  9. <link href="style/reset.css" rel="stylesheet" type="text/css"
  10. <link href="style/style.css" rel="stylesheet" type="text/css"
  11. <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> 
  12. <script type="text/javascript" src="js/jquery.codetker.windowScroll.js"></script> 
  13. </head> 
  14.  
  15. <body scroll="no"
  16. <div class="wrap" style="dispaly:block;"
  17. <div class="stageControl"
  18. <ul> 
  19. <li>stage1</li> 
  20. <li>stage2</li> 
  21. <li>stage3</li> 
  22. <li>stage4</li> 
  23. <li>stage5</li> 
  24. </ul> 
  25. </div> 
  26. <div class="stage stage1"
  27. <div class="pageControl"
  28. <ul> 
  29. <li>page1</li> 
  30. <li>page2</li> 
  31. <li>page3</li> 
  32. </ul> 
  33. </div> 
  34. <div class="page page1"></div> 
  35. <div class="page page2"></div> 
  36. <div class="page page3"></div>  
  37. </div> 
  38. <div class="stage stage2"></div> 
  39. <div class="stage stage3"></div> 
  40. <div class="stage stage4"></div> 
  41. <div class="stage stage5"></div> 
  42. </div> 
  43. <script type="text/javascript"
  44. $(document).ready(function(){ 
  45. $(".wrap").windowScroll({ 
  46. 'choose' : 0, 
  47. 'verticalSpeed' : 2, //控制垂直滾動(dòng)速度 
  48. 'horizontalSpeed' : 1, 
  49. 'objControlUl''.wrap .stageControl' 
  50. }); 
  51. $(".stage1").windowScroll({ 
  52. 'choose': 1, 
  53. 'verticalSpeed' : 1, 
  54. 'horizontalSpeed' : 1,//控制水平滾動(dòng)速度 
  55. 'objControlUl''.stage1 .pageControl' 
  56. }); 
  57. }); 
  58. </script> 
  59. </body> 
  60. </html> 

CSS

 

 
  1. @charset "utf-8"
  2. /* CSS Document */ 
  3. body{ 
  4. margin:0 0; 
  5. padding:0 0; 
  6. height:100%; 
  7. width:100%; 
  8. overflow: hidden;; 
  9. .wrap{ 
  10. font-family:"微軟雅黑","宋體", Times, "Times New Roman", serif; 
  11. font-size:14px; 
  12. margin:0 0; 
  13. padding:0 0; 
  14. height:100%; 
  15. width:100%; 
  16. overflow:hidden; 
  17.  
  18. .stage,.page{ 
  19. width: 100%; 
  20. height: 100%; 
  21. .stage1{ 
  22. background-color:red; 
  23. .stage2{ 
  24. background-color:#fff; 
  25. .stage3{ 
  26. background-color:yellow; 
  27. .stage4{ 
  28. background-color:green; 
  29. .stage5{ 
  30. background-color:blue; 
  31. .page{ 
  32. float: left; 
  33. .page2{ 
  34. background-color: #666; 
  35. .page3{ 
  36. background-color: #ddd; 
  37. .stageControl{ 
  38. position: fixed; 
  39. .stageControl ul li{ 
  40. width: 100px; 
  41. height: 30px; 
  42. line-height: 30px; 
  43. text-align: center; 
  44. cursor: pointer; 
  45. .stageControl ul li:hover{ 
  46. color: blue; 
  47. .pageControl{ 
  48. position: fixed; 
  49. left: 200px; 
  50. .pageControl ul li{ 
  51. float: left; 
  52. width: 50px; 
  53. height: 25px; 
  54. line-height: 25px; 
  55. text-align: center; 
  56. cursor: pointer; 
  57. .pageControl ul li:hover{ 
  58. color: blue; 

JavaScript

 

 
  1. /* 
  2. * windowScroll 0.1 
  3. * window滾動(dòng)插件,上下左右,可選擇是否回彈。參考搜狗歡迎頁(yè)面 
  4. * 兼容IE,FF,Chrome等常見(jiàn)瀏覽器 
  5. * 借鑒搜狗4.2版http://ie.sogou.com/features4.2.html 
  6. */ 
  7. ;(function($,window,document,undefined){ 
  8. //定義構(gòu)造函數(shù) 
  9. var WindowObj=function(ele,opt){ 
  10. this.$element=ele; //最外層對(duì)象 
  11. this.defaults={ 
  12. 'choose' : 0,//默認(rèn)為上下 
  13. 'verticalSpeed' : 1, 
  14. 'horizontalSpeed' : 1, 
  15. 'objControlUl'null 
  16. }, 
  17.  
  18. this.options=$.extend({},this.defaults,opt ); 
  19.  
  20. //阻止默認(rèn)行為和冒泡,這里可以定義多個(gè)方法都要用到的函數(shù) 
  21. this.stopDefaultAndBubble=function(e){ 
  22. e=e||window.event; 
  23. if (e.preventDefault) { 
  24. e.preventDefault(); 
  25. e.returnValue=false
  26.  
  27. if (e.stopPropagation) { 
  28. e.stopPropagation(); 
  29. e.cancelBubble=true
  30.  
  31. this.setSize=function(ele){ 
  32. $(ele).css({ 
  33. 'width':$(window).outerWidth()+'px' 
  34. }); 
  35. //自動(dòng)判斷元素是否存在,對(duì)undefined賦css屬性無(wú)意義 
  36. $(ele).children('.stage').css({ 
  37. 'width':$(window).outerWidth()+'px'
  38. 'height':$(window).outerHeight()+'px' 
  39. }); 
  40. $(ele).children('.page').css({ 
  41. 'width':$(window).outerWidth()+'px'
  42. 'height':$(window).outerHeight()+'px' 
  43. }); 
  44.  
  45. //給構(gòu)造函數(shù)添加方法 
  46. WindowObj.prototype={ 
  47.  
  48. //上下滾動(dòng)的方法 
  49. verticalMove:function(){ 
  50. var obj=this.$element; //最外層對(duì)象 
  51. var speed=this.options.verticalSpeed; 
  52. var objControl=this.options.objControlUl;//控制按鈕 
  53.  
  54. var windowHeight=$(window).height(); 
  55. var list=$(obj).children('.stage'); 
  56. var listMax=$(list).length; 
  57.  
  58. var is_chrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1; 
  59. if(is_chrome){ 
  60. //判斷webkit內(nèi)核,供scrollTop兼容性使用 
  61. windowobject='body'
  62. }else
  63. //支持IE和FF 
  64. windowobject='html'
  65. var stop=0; 
  66.  
  67. //均設(shè)置為windows大小 
  68. this.setSize(obj); 
  69.  
  70. //得到當(dāng)前的垂直位置 
  71. var stageIndex; 
  72. function getIndex(){ 
  73. stageIndex=Math.round($(window).scrollTop()/windowHeight); 
  74. }  
  75.  
  76. //綁定鍵盤(pán)上下按鍵事件 
  77. $(document).keydown(function(event) { 
  78. /* 綁定keycode38,即向上按鈕 */ 
  79. if (event.keyCode==38) { 
  80. getIndex(); 
  81. setTimeout(function(){ 
  82. scrollStage(windowobject,stageIndex,1); //stageIndex為當(dāng)前頁(yè)碼 
  83. },100); 
  84. }else if (event.keyCode==40) {//綁定40,即向下按鈕 
  85. getIndex(); 
  86. setTimeout(function(){ 
  87. scrollStage(windowobject,stageIndex,-1); //stageIndex為當(dāng)前頁(yè)碼 
  88. },100); 
  89. }); 
  90.  
  91. //綁定滑輪功能的函數(shù) 
  92. function handle(delta){ 
  93. getIndex(); 
  94. if (delta<0) { 
  95. setTimeout(function(){ 
  96. scrollStage(windowobject,stageIndex,-1); //stageIndex為當(dāng)前頁(yè)碼 
  97. },100); 
  98. }else
  99. setTimeout(function(){ 
  100. scrollStage(windowobject,stageIndex,1); //stageIndex為當(dāng)前頁(yè)碼 
  101. },100); 
  102.  
  103.  
  104. //判斷滑輪,解決兼容性 
  105. function wheel(event){ 
  106. var delta = 0; 
  107. if (!event) event = window.event; 
  108. if (event.wheelDelta) { 
  109. delta = event.wheelDelta;  
  110. if (window.opera) delta = -delta; 
  111. else if (event.detail) { 
  112. delta = -event.detail; 
  113. if (delta) 
  114. handle(delta); //調(diào)用執(zhí)行函數(shù) 
  115.  
  116. //注冊(cè)事件 
  117. if (window.addEventListener) { 
  118. window.addEventListener('DOMMouseScroll', wheel, false); 
  119. window.onmousewheel = document.onmousewheel = wheel; 
  120.  
  121. //綁定鼠標(biāo)滾輪事件 
  122. $(document).bind('mousedown'function(event) { 
  123. if (e.which==2) {//which=2代表鼠標(biāo)滾輪,即為中鍵 
  124. this.stopDefaultAndBubble(e); 
  125. //bugfix 搜狗瀏覽器的ie內(nèi)核只有在定時(shí)器觸發(fā)這個(gè)函數(shù)才生效 
  126. setTimeout(function(){ 
  127. this.stopDefaultAndBubble(e); 
  128. },10); 
  129. }); 
  130.  
  131. //如果有ul li控制按鈕 
  132. if (objControl!=null) { 
  133. $(objControl).delegate('li''click'function() { 
  134. stageIndex=$(this).index(); 
  135. setTimeout(function(){ 
  136. scrollStage(windowobject,stageIndex,0); 
  137. },100); 
  138. }); 
  139.  
  140. function scrollStage(obj,stIndex,dir){//如果用scrollStage=function來(lái)指定的話沒(méi)有聲明提前,然后就會(huì)找不到這個(gè)函數(shù)了 
  141. //obj為操作滾動(dòng)的對(duì)象 
  142. //stIndex為點(diǎn)擊調(diào)用時(shí)應(yīng)該滾動(dòng)到的頁(yè)面頁(yè)碼,按鍵和滾輪調(diào)用時(shí)默認(rèn)為1(傳入0) 
  143. //dir傳入滾動(dòng)時(shí)的方向,0代表不滾動(dòng),1代表向上,-1代表向下 
  144. var sIndex=stIndex;//!(dir)則stageIndex為要到的頁(yè)碼,否則為當(dāng)前頁(yè)碼 
  145. var windowobject=obj; 
  146. var direction=0||dir; //接收參數(shù)封裝,沒(méi)有傳入時(shí)暫時(shí)認(rèn)為為0 
  147. var target=windowHeight*sIndex; //目標(biāo)頁(yè)面距離文檔頂部距離 
  148.  
  149. if ( !$(windowobject).is(':animated') ) {//當(dāng)沒(méi)有在滾動(dòng)時(shí) 
  150. if(!direction){ ////響應(yīng)guider,此時(shí)stageIndex為目標(biāo)頁(yè)面頁(yè)碼 
  151. if ($(window).scrollTop() > target) { //內(nèi)容下移,窗口上移,上方出現(xiàn)彈痕 
  152. direction=-1; 
  153. $(windowobject).animate({ 
  154. "scrollTop": target +"px" 
  155. },1000*speed,function(){ 
  156. crash_bottom(1,target,20,150); //調(diào)用撞擊函數(shù),先撞頂部,target變成當(dāng)前頁(yè)面了 
  157. }); 
  158. }else if($(window).scrollTop() == windowHeight*sIndex){ //當(dāng)前頁(yè)面時(shí) 
  159. direction=0; 
  160. crash_bottom(1, target ,20,150); //模擬撞底部 
  161. }else
  162. direction=1; 
  163. $(windowobject).animate({ 
  164. "scrollTop": target +"px" 
  165. },1000*speed,function(){ 
  166. crash(1,target,20,150); //調(diào)用撞擊函數(shù),先撞底部 
  167.  
  168. }); 
  169. }else{//響應(yīng)鼠標(biāo)滾輪和鍵盤(pán)上下,sindex為當(dāng)前頁(yè)面 
  170. if(direction==1){ 
  171. if(sIndex==0){ 
  172. crash(1,target,20,150); 
  173. }else//往上翻 
  174. sIndex-=1; 
  175. $(windowobject).animate({ 
  176. "scrollTop":windowHeight*sIndex+"px" 
  177. },1000*speed,function(){ 
  178. crash_bottom(1,windowHeight*sIndex,20,150); //調(diào)用撞擊函數(shù),往下翻內(nèi)容往上,先撞頂部 
  179. ); 
  180. }else
  181. if(sIndex==listMax){ 
  182. crash_bottom(1,target,20,150); 
  183. }else//往下翻 
  184. sIndex+=1; 
  185. $(windowobject).animate({ 
  186. "scrollTop":windowHeight*sIndex+"px" 
  187. },1000*speed,function(){ 
  188. crash(1,windowHeight*sIndex,20,150); //調(diào)用撞擊函數(shù),往上翻內(nèi)容往下,先撞底部 
  189. }); 
  190.  
  191.  
  192. //撞擊函數(shù) 
  193. function crash_bottom(direction,termin,distant,time){ 
  194. if (!stop) { 
  195. var scrollTop=$(window).scrollTop(); 
  196. if (direction==1) { 
  197. direction=0; 
  198. $(windowobject).animate({"scrollTop":"+="+distant+"px"},time,function(){ 
  199. crash_bottom(direction,termin,distant*0.6,time); 
  200. if (distant<=15||time>150) { 
  201. stop=1;//停止碰撞 
  202.  
  203. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  204. stop=0; 
  205. }); 
  206. }); 
  207. }else if (direction==0) { 
  208. direction=1; 
  209. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  210. crash_bottom(direction,termin,distant*0.6,time); 
  211. if (distant<=15||time>150) { 
  212. stop=1;//停止碰撞 
  213.  
  214. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  215. stop=0; 
  216. }); 
  217. }); 
  218. function crash(direction,termin,distant,time){ 
  219. if (!stop) { 
  220. var scrollTop=$(window).scrollTop(); 
  221. if (direction==1) { 
  222. direction=0; 
  223. $(windowobject).animate({"scrollTop":"-="+distant+"px"},time,function(){ 
  224. crash(direction,termin,distant*0.6,time); 
  225. if (distant<=15||time>150) { 
  226. stop=1;//停止碰撞 
  227.  
  228. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  229. stop=0; 
  230. }); 
  231. }); 
  232. }else if (direction==0) { 
  233. direction=1; 
  234. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  235. crash(direction,termin,distant*0.6,time); 
  236. if (distant<=15||time>150) { 
  237. stop=1;//停止碰撞 
  238.  
  239. $(windowobject).animate({"scrollTop":termin+"px"},time,function(){ 
  240. stop=0; 
  241. }); 
  242. }); 
  243.  
  244. }, 
  245. //左右滾動(dòng)的方法 
  246. horizontalMove:function(){ 
  247. var obj=this.$element; //最外層對(duì)象 
  248. var speed=this.options.horizontalSpeed; 
  249. var objControl=this.options.objControlUl;//控制按鈕 
  250.  
  251. var windowWidth=$(window).width(); 
  252. var list=$(obj).children('.page'); 
  253. var listMax=$(list).length; 
  254.  
  255. var is_chrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1; 
  256. if(is_chrome){ 
  257. //判斷webkit內(nèi)核,供scrollTop兼容性使用 
  258. windowobject='body'
  259. }else
  260. //支持IE和FF 
  261. windowobject='html'
  262. var stop=0; 
  263.  
  264. //均設(shè)置為windows大小 
  265. this.setSize(obj); 
  266. $(obj).css({'width':windowWidth*listMax+'px'}); 
  267.  
  268. var pageIndex; //當(dāng)前頁(yè)面頁(yè)碼(負(fù)數(shù)) 
  269. function getPageIndex(){ 
  270. pageIndex=Math.round(parseInt($(obj).css("margin-left")) / windowWidth); 
  271.  
  272. //綁定鍵盤(pán)左右按鍵事件 
  273. $(document).keydown(function(event){ 
  274. //判斷event.keyCode為39(即向右按鈕) 
  275. if (event.keyCode==39) { 
  276. getPageIndex(); 
  277. scrollPage($(obj),pageIndex,-1);  
  278. //判斷event.keyCode為37(即向左按鈕 
  279. else if (event.keyCode==37) { 
  280. getPageIndex(); 
  281. scrollPage($(obj),pageIndex,1); 
  282. }); 
  283.  
  284. //如果有ul li控制按鈕 
  285. if (objControl!=null) { 
  286. $(objControl).delegate('li''click'function() { 
  287. pageIndex=$(this).index(); 
  288. setTimeout(function(){ 
  289. scrollPage(obj,pageIndex,0); 
  290. },100); 
  291. }); 
  292.  
  293. function scrollPage(obje,pIndex,dir){ 
  294. var windowobject=obje; 
  295. var direction=0||dir; 
  296. var pageIndex=pIndex; 
  297. var dist=Math.round(parseInt($(obj).css("margin-left"))); //當(dāng)前頁(yè)距離左邊的margin(負(fù)值) 
  298. var aim=pageIndex*windowWidth*(-1); 
  299.  
  300. if (!$(windowobject).is(":animated")) { 
  301. if(!direction){ //響應(yīng)nav 
  302.  
  303. if (dist != aim) { //此時(shí)pageIndex為yearID.非負(fù)值 
  304. $(windowobject).animate({"margin-left": aim + "px"}, 
  305. 1000*speed); 
  306. }else
  307. direction=0; 
  308. $(windowobject).animate({"margin-left":"+="+"50px"},500).animate({"margin-left":"-="+"100px"},500).animate({"margin-left":"+="+"50px"},500); 
  309. }else//響應(yīng)鍵盤(pán)左右鍵 
  310. if(direction==1){ //pageIndex為負(fù)值 
  311. if(pageIndex==0){ 
  312. $(windowobject).animate({"margin-left":"+="+"50px"},500).animate({"margin-left":"-="+"100px"},500).animate({"margin-left":"+="+"50px"},500);  
  313. }else
  314. pageIndex+=1; //顯示左邊內(nèi)容,左鍵 
  315. $(windowobject).animate({"margin-left":"+=" + windowWidth + "px"}, 
  316. 1000*speed); 
  317. }else
  318. if(pageIndex== ((-1)*(listMax-1))){ 
  319. $(windowobject).animate({"margin-left":"-="+"50px"},500).animate({"margin-left":"+="+"100px"},500).animate({"margin-left":"-="+"50px"},500);  
  320. }else
  321. pageIndex-=1; 
  322. $(windowobject).animate({"margin-left":"-=" + windowWidth + "px"}, 
  323. 1000*speed); 
  324.  
  325.  
  326.  
  327.  
  328. //在插件中使用windowObj對(duì)象的方法,0為vertical,1為horizontal 
  329. $.fn.windowScroll=function(options){ 
  330. //創(chuàng)建實(shí)體 
  331. var windowObj=new WindowObj(this,options); 
  332. //根據(jù)選擇調(diào)用方法 
  333. if (windowObj.options.choose==0) { 
  334. return windowObj.verticalMove(); 
  335. }else if(windowObj.options.choose==1){ 
  336. return windowObj.horizontalMove(); 
  337. }else{//2之后的留擴(kuò)展吧 
  338. //add some functions 
  339. })(jQuery,window,document); 

詳細(xì)的代碼下載見(jiàn)https://github.com/codetker/myWindowScroll

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 永平县| 芮城县| 龙口市| 九龙城区| 贵州省| 班戈县| 安岳县| 易门县| 东兰县| 宝兴县| 博爱县| 赤城县| 韶山市| 阆中市| 宁都县| 沙河市| 安徽省| 宁蒗| 南乐县| 曲松县| 久治县| 灯塔市| 农安县| 抚顺县| 扬州市| 长汀县| 沭阳县| 凤山市| 桑日县| 衡阳县| 漾濞| 新丰县| 娄烦县| 盐池县| 闽清县| 甘肃省| 湾仔区| 汾阳市| 白山市| 阜平县| 崇文区|