一、效果图
二、设计思路
第一步:克隆两个ul,使用循环计时器进行无缝滚动 第二步:设置滚动的速度和时间 第三步:设置鼠标进去box停止滚动,离开继续滚动。 第四步:设置按钮拖动的函数,滚动条拖动,上面动画跟着移动,鼠标抬起,按照原先的速度进行滚动。
三、核心代码
< script>
var time;
var speed= 2 ;
var timer= 10 ;
var Item, menuList, parItem, Box, Tab, Body, tarTab;
var isadd = false ;
var offsetLeft;
var selfOffset;
window. onload = function ( ) {
Item= document. getElementsByClassName ( "item" ) [ 0 ] ;
menuList= document. getElementsByClassName ( "menu-list" ) [ 0 ] ;
parItem= document. getElementsByClassName ( "par-item" ) [ 0 ] ;
Box= document. getElementsByClassName ( "box" ) [ 0 ] ;
Tab= document. getElementsByClassName ( "tab" ) [ 0 ] ;
tarTab = document. getElementsByClassName ( "tar-tab" ) [ 0 ] ;
Body = document. body;
Item. appendChild ( menuList. cloneNode ( true ) ) ;
Animate ( ) ;
Box. onmouseenter = function ( ) {
clearInterval ( time) ;
if ( ! isadd) {
this . addEventListener ( "mouseleave" , leaveHandle) ;
offsetLeft= tarTab. offsetLeft+ Box. offsetLeft;
}
}
function leaveHandle ( ) {
Animate ( ) ;
}
Tab. onmousedown = function ( e ) {
selfOffset= e. offsetX;
isadd= true ;
Box. removeEventListener ( "mouseleave" , leaveHandle) ;
Body. addEventListener ( "mousemove" , Move) ;
e. preventDefault ( ) ;
}
function Move ( e ) {
var x= e. pageX;
var left= x- offsetLeft- selfOffset;
if ( left< 0 ) {
left= 0 ;
}
else if ( left> 800 ) {
left= 800 ;
}
Tab. style. left= left+ "px" ;
parItem. scrollLeft= left/ 2 * 3 ;
}
Body. onmouseup = function ( ) {
console. log ( "自动执行" ) ;
isadd= false ;
this . removeEventListener ( "mousemove" , Move) ;
Animate ( ) ;
}
Body. onmouseleave = function ( ) {
var events= document. createEvent ( "MouseEvents" ) ;
events. initEvent ( "mouseup" , false , true ) ;
this . dispatchEvent ( events) ;
}
}
function Animate ( ) {
if ( time)
clearInterval ( time) ;
time= setInterval ( function ( ) {
var scrollLeft= parItem. scrollLeft;
scrollLeft+= speed;
if ( scrollLeft>= parItem. scrollWidth/ 2 ) {
scrollLeft= 0 ;
}
parItem. scrollLeft= scrollLeft;
Tab. style. left = scrollLeft / 3 * 2 + "px" ;
} , timer) ;
}
< / script>