/** * 平滑滚动 * @param target[document.Element] 滚动目标 * @param lengthTo[number] 滚动到达 * @param type[string] 滚动x/y轴 * @param callback[function] 滚动后回调 */ function roll(target,lengthTo,type,callback){ var type = type || "x"; var dd = target, dnow = (type == "x") ? dd.scrollLeft : dd.scrollTop; dmin = 0, dmax = (type == "x") ? dd.scrollWidth : dd.scrollHeight, dto = (lengthTo > dmin) ? ( ( lengthTo < dmax ) ? lengthTo : dmax ): dmin, step = 20, distance = Math.abs (dto - dnow), count = 1 , direction = (dto > dnow)? 1 : -1 ; (function() { var timePre = count / step; var dnow = (type == "x") ? dd.scrollLeft : dd.scrollTop; var speed = Math.floor( distance / step ) ; // speed = Tween.Quad.easeIn(1,0, speed * 1.5 , 0.5 + 0.1 * count); //需要有缓动函数支持 var move = dnow + direction * speed ; // console.log(distance,speed , move); if(timePre > 1 || Math.abs(move - dto ) <= Math.abs(speed)){ (type == "x") ? target.scrollLeft = dto : target.scrollTop = dto; if(typeof callback =="function"){ callback(); } return ; } (type == "x") ? target.scrollLeft = move : target.scrollTop = move; count++; setTimeout(arguments.callee, 40); })(); }