Line 114: | Line 114: | ||
<a href="javascript:;" id="next" class="arrow">></a> | <a href="javascript:;" id="next" class="arrow">></a> | ||
</div> | </div> | ||
+ | <script> | ||
+ | window.onload=function() { | ||
+ | // body... | ||
+ | var prev=document.getElementById("prev"); | ||
+ | var next=document.getElementById("next"); | ||
+ | var list=document.getElementById("list"); | ||
+ | var buttons=document.getElementById("buttons").getElementsByTagName("span"); | ||
+ | var container=document.getElementById("container"); | ||
+ | var index=1; | ||
+ | var timer; | ||
+ | var animated=false; | ||
+ | function shownButton(){ | ||
+ | for (var i = 0; i < buttons.length ; i++) { | ||
+ | if( buttons[i].className == 'on'){ | ||
+ | buttons[i].className = ''; | ||
+ | /* prev和next每click一次, | ||
+ | 就会清除一次前一个class为on的span元素, | ||
+ | 所以没有必要再去循环下面的span*/ | ||
+ | break; | ||
+ | } | ||
+ | // 或者直接遍历清除 buttons[i].className=""; | ||
+ | } | ||
+ | buttons[index -1].className="on"; | ||
+ | } | ||
+ | function animate(offset){ | ||
+ | var time = 300; | ||
+ | var inteval = 10; | ||
+ | var speed = offset/(time/inteval); | ||
+ | animated=true; | ||
+ | var newLeft=parseInt(list.style.left) +offset; | ||
+ | function go(){ | ||
+ | if ( (speed > 0 && parseInt(list.style.left) < newLeft) || (speed < 0 && parseInt(list.style.left) > newLeft)) { | ||
+ | list.style.left = parseInt(list.style.left) + speed + 'px'; | ||
+ | setTimeout(go, inteval); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | |||
+ | animated=false; | ||
+ | // list.style.left=newLeft+"px"; | ||
+ | if (newLeft >-600) { | ||
+ | list.style.left=-3000+"px"; | ||
+ | }; | ||
+ | if (newLeft <-3000) { | ||
+ | list.style.left=-600+"px"; | ||
+ | }; | ||
+ | } | ||
+ | } | ||
+ | go(); | ||
+ | }; | ||
+ | |||
+ | prev.onclick=function(){ | ||
+ | /*添加一个if判断index为1时,如果继续往前滚的话就让index返回第五个span | ||
+ | 但是当快速点击arrow时会出现一种span点亮延迟的情况。可以尝试把判断index是否大于1或小于5的情况放进 | ||
+ | 判断是否animated的if语句中,先判断能不能点击,再点亮。 | ||
+ | */ | ||
+ | if (!animated) { | ||
+ | if (index==1) { | ||
+ | index=5; | ||
+ | }else { | ||
+ | index -=1; | ||
+ | } | ||
+ | |||
+ | shownButton(); | ||
+ | animate(600); | ||
+ | } | ||
+ | |||
+ | |||
+ | }; | ||
+ | next.onclick=function(){ | ||
+ | |||
+ | |||
+ | |||
+ | if (!animated) { | ||
+ | if (index==5) { | ||
+ | index=1; | ||
+ | }else { | ||
+ | index +=1; | ||
+ | } | ||
+ | shownButton(); | ||
+ | animate(-600); | ||
+ | } | ||
+ | }; | ||
+ | for (var i = 0; i < buttons.length; i++) { | ||
+ | buttons[i].onclick=function(){ | ||
+ | //无关紧要 | ||
+ | if (this.className=="on") { | ||
+ | return; | ||
+ | } | ||
+ | var myIndex=parseInt(this.getAttribute("index")); | ||
+ | var offset=-600*(myIndex-index); | ||
+ | if (!animated) { | ||
+ | animate(offset); | ||
+ | } | ||
+ | index=myIndex; | ||
+ | shownButton(); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | function play(){ | ||
+ | timer=setInterval(function(){ | ||
+ | next.onclick(); | ||
+ | },2000); | ||
+ | } | ||
+ | function stop(){ | ||
+ | clearInterval(timer); | ||
+ | } | ||
+ | play(); | ||
+ | container.onmouseover=stop; | ||
+ | container.onmouseout=play; | ||
+ | } | ||
+ | </script> | ||
</body> | </body> | ||
</html> | </html> |
Revision as of 09:38, 9 September 2018