rollTolls.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*jshint esversion: 9 */
  2. /*
  3. * 简单的页面滚动工具 一篇文字
  4. */
  5. /**
  6. * 从开始的位置移动到结束的位置(匀速,固定时间)
  7. */
  8. export function simpleRoll(params = {}) {
  9. let top = undefined;
  10. let left = undefined;
  11. /** 如果不传值则不做处理top位置 */
  12. if (params.hasOwnProperty('top')) {
  13. top = Number(params.top) || 0;
  14. }
  15. if (params.hasOwnProperty('left')) {
  16. left = Number(params.left) || 0;
  17. }
  18. let time = Number(params.time) || 0;
  19. let target = params.target;
  20. if (!target) {
  21. console.warn('请传入滚动容器元素');
  22. return;
  23. }
  24. let hasLeft = left !== undefined;
  25. let hasTop = top !== undefined;
  26. if (!hasLeft && !hasTop) {
  27. console.warn('请传入top || left值');
  28. return;
  29. }
  30. let startTime = Date.now();
  31. let scrollTop = target.scrollTop || 0;
  32. let scrollLeft = target.scrollLeft || 0;
  33. let lengthY = top - scrollTop;
  34. let lengthX = left - scrollLeft;
  35. requestAnimationFrame(function func() {
  36. /** 时间进度 */
  37. let schedule = (Date.now() - startTime) / time;
  38. // 到达指定时间了,停止执行
  39. if (schedule >= 1) {
  40. if (hasLeft) {
  41. target.scrollLeft = lengthX + scrollLeft;
  42. }
  43. if (hasTop) {
  44. target.scrollTop = lengthY + scrollTop;
  45. }
  46. return;
  47. }
  48. /** 此时的位置 */
  49. if (hasTop) {
  50. target.scrollTop = lengthY * schedule + scrollTop;
  51. }
  52. if (hasLeft) {
  53. target.scrollLeft = lengthX * schedule + scrollLeft;
  54. }
  55. requestAnimationFrame(func);
  56. });
  57. }