跟著視頻把效果都搞出來了,還加了自動播放,也能實現了,但是發現鼠標移入移出之后就有BUG了。
主要問題是這樣的,添加了setInterval做自動播放,鼠標移入時停止播放,移出繼續播放。
問題一:當鼠標移入停止,移出繼續播放時卻又從頭開始播放了,并不是接著下一張圖片切換。
問題二:當手動切換圖片時,并不是自動播放下一張圖片,而是切換到自動播放的下一張圖片,
例如,當自動播放到第三張時,手動切換到第一張圖片,然后就接著自動切換到第四張圖片了。
這些問題該如何解決?
是不是應該在執行計時器之前,先判斷是否為當前圖片?這個又該怎么實現?
代碼如下,希望能有人幫我測試一下:
<body> <div?class="top_p"> ?<h1>ELASTIC?IMAGE?SLIDESHOW?WITH?THUMBNAIL?PREVIEW</h1> </div> <div?class="slider"> <div?class="main"?id="tem_main"> ?<div?class="main_i?{{css}}"?id="main_{{index}}"> ??<div?class="caption"> ???<h2>{{h2}}</h2> ???<h3>{{h3}}</h3> ??</div> ??<img?src="img/{{index}}.jpg"?class="picture"> ?</div> </div> <div?class="ctrl"?id="tem_ctr"> ?<a?href="javascript:add({{index}});"?class="ctrl_i"?id="ctr_{{index}}"><img?src="img/{{index}}.jpg"></a> </div> </div> <div?class="foot_p"> <p>Demo?1?|?Demo2(wiht?autoplay)<br/> Resize?the?window?to?see?the?slider?adjusting</p> </div> </body>
*{margin:0;padding:0;} body{ ????padding:50px?0; ????background-color:#FFF; ????font-size:14px; ????font-family:"方正蘭亭超細黑簡體"; ????color:#555; ????-webkit-font-smoothing:antialiased; ????} .slider, .main, .main_i{ ????width:1280px; ????height:500px; ????position:relative; ????} .slider{ ????margin:0?auto; ????} .main{ ????overflow:hidden; ????} .main_i?img{ ????width:100%; ????position:absolute; ????top:0; ????left:0; ????border:none; ????} .main_i?.caption{ ????position:absolute; ????top:30%; ????right:65%; ????z-index:10; ????} .main_i?.caption?h2{ ????font-size:40px; ????line-height:50px; ????color:#B5B5B5; ????text-align:right; ????} .main_i?.caption?h3{ ????font-size:70px; ????line-height:70px; ????color:#B5B5B5; ????text-align:right; ????} .ctrl{ ????width:100%; ????height:13px; ????line-height:13px; ????text-align:center; ????position:absolute; ????left:0; ????bottom:-13px; ????} .ctrl?.ctrl_i{ ????display:inline-block; ????width:150px; ????height:13px; ????margin-left:1px; ????position:relative; ????background-color:#B6B6B6; ????box-shadow:0?1px?1px?rgba(0,0,0,.3); ????} .ctrl?.ctrl_i?img{ ????width:100%; ????position:absolute; ????left:0; ????bottom:50px; ????z-index:1; ????transition:all?.2s; ????opacity:0; ????} .ctrl_i:hover{ ????background-color:#F0F0F0; ????} .ctrl_i:hover?img{ ????bottom:13px; ????opacity:1; ????z-index:9; ????-webkit-box-reflect:?below?0??-webkit-gradient( ???linear, ???left?top, ???left?bottom, ???from(transparent), ???color-stop(50%,transparent), ???to(rgba(0,0,0,0.8)) ???); ????} /*當前展現狀態*/ .ctrl?.ctrl_i_active, .ctrl?.ctrl_i_active:hover{ ????background-color:#000; ????} .ctrl?.ctrl_i_active?img{ ????opacity:0; ????} /*幻燈片切換*/ .main_i{ ????position:absolute; ????right:50%; ????top:0; ????opacity:0; ????transition:all?.5s; ????z-index:2; ????} .main_i_right{ ????right:-50%; ????} .main_i?h2{ ????margin-right:45px; ????} .main_i?h3{ ????margin-right:-45px; ????} .main_i?h2, .main_i?h3{ ????transition:all?.5s?0.5s; ????} #main_background, .slider?.main_i_active{ ????opacity:1; ????position:absolute; ????right:0; ????} #main_background{ ????z-index:1; ????} .slider?.main_i_active?h2, .slider?.main_i_active?h3{ ????margin-right:0; ????} .top_p{ ????width:1600px; ????height:50px; ????margin:15px?auto; ????line-height:50px; ????text-align:center; ????font-size:22px; ????font-weight:bold; ????font-family:"微軟雅黑"; ????color:#000; ????} .foot_p{ ????margin:50px?auto; ????width:1600px; ????text-align:center; ????line-height:40px; ????font-size:22px; ????font-weight:bold; ????font-family:"微軟雅黑"; ????color:#000; ????}
//1.定義數據 var?data=?[ ?{img:1,h2:'Loving',h3:'REBEL'}, ?{img:2,h2:'Friendly',h3:'DEVIL'}, ?{img:3,h2:'Loving',h3:'REBEL'}, ?{img:4,h2:'Insecure',h3:'HUSSLER'}, ?{img:5,h2:'Creative',h3:'DUET'}, ?{img:6,h2:'Passionate',h3:'SEEKER'}, ?{img:7,h2:'Crazy',h3:'FRTEND'}, ]; //2.通用函數 function?g(id){ ????if(id.substr(0,1)?==?'.'){ ????return?document.getElementsByClassName(id.substr(1));???? ????????} ????return?document.getElementById(id); ????} //3.添加所有幻燈片的操作 function?addSlider(){ ????//3.1獲取模板 ????var?tpl_main?=?g('tem_main').innerHTML.replace(/^\s*/,'').replace(/\s*$/,''); ????var?tpl_ctr?=?g('tem_ctr').innerHTML.replace(/^\s*/,'').replace(/\s*$/,''); ???? ????//3.2定義最終輸出?HTML?變量 ????var?out_main?=?[]; ????var?out_ctr?=?[]; ???? ????//3.3歷遍所有數據,構建最終輸出的?THML ???? ????for(?i?in?data){ ????var?_html_main?=?tpl_main ????.replace(/{{index}}/g,data[i].img) ????.replace(/{{h2}}/g,data[i].h2) ????.replace(/{{h3}}/g,data[i].h3) ????.replace(/{{css}}/g,['','main_i_right'][i%2]); ????var?_html_ctr?=?tpl_ctr.replace(/{{index}}/g,data[i].img); ???? ????out_main.push(_html_main); ????out_ctr.push(_html_ctr); ????????} ???? ????//3.4把?HTML?回寫到對應的?DOM?里面 ????g('tem_main').innerHTML?=?out_main.join(''); ????g('tem_ctr').innerHTML?=?out_ctr.join(''); ???? ????//3.5增加main_background ????g('tem_main').innerHTML?+=?tpl_main ????.replace(/{{index}}/g,'{{index}}') ????.replace(/{{h2}}/g,data[i].h2) ????.replace(/{{h3}}/g,data[i].h3); ???? ????g('main_{{index}}').id?=?'main_background'; ???? } //4.幻燈片切換???? function?add(n){ ????//4.1獲取要展示的幻燈片&控制的按鈕 ????var?main?=?g('main_'+n); ????var?ctr?=?g('ctr_'+n);? ???? ????//4.2獲取所有幻燈片以及控制按鈕,然后清除樣式 ????var?clear_main?=?g('.main_i'); ????var?clear_ctrl?=?g('.ctrl_i'); ???? ????for(var?i=0;?i<clear_ctrl.length;?i++){ ????????clear_main[i].className?=?clear_main[i].className.replace('?main_i_active',''); ????????clear_ctrl[i].className?=?clear_ctrl[i].className.replace('?ctrl_i_active',''); ????????} ????//4.3為當前幻燈片和控制按鈕添加樣式 ????main.className?+=?'?main_i_active'; ????ctr.className?+=?'?ctrl_i_active'; ???? ????//4.4切換時,復制上一張幻燈片到?main_background ????setTimeout(function(){ ????????g('main_background').innerHTML?=?main.innerHTML; ????????},500);???? ????} ???????? //5動態調整圖片高度 //function?pic(){ //????var?pic?=?g('.picture'); //????for(var?i=0;i<pic.length;i++){ //????????pic[i].style.marginTop?=?(-1?*?pic[i].clientHeight/2)?+?'px' //????????} //????} //獲取當按鈕的id //function?getNumber(){ //????var?num?=?g('tem_ctr').getElementsByTagName('a'); //????for(var?b=0;b<num.length;b++){ //????????num[b].onclick?=?function(){ //????????????if(this.className?==?'ctrl_i_active'){ //????????????????return; //????????????????} //????????var?oA?=?parseInt(this.getAttribute('id').split('_',1)); //????????console.log(oA); //????????????} //????????} //????} //6.0自動播放 var?timer; function?play(){ ????var?n=1; ????timer?=?setInterval(function(){???????? ??????????if(n<7){ ?????????????n++; ??????????????}else{ ?????????????n?=?1; ??????????????????} ????????????add(n); ????????//console.log(g('main_'+a).getAttribute('id'));???? ????????},2000);???? ????} //7.0停止播放 function?stop(){ ????clearInterval(timer); ????} ???? window.onload?=?function(){ ????addSlider(); ????add(1); ????g('tem_main').onmouseover?=?stop; ????g('tem_main').onmouseout?=?play; ????play(); ????//console.log(); ????getNumber(); ????}