JS 无间隙滚动 封装

小灰灰 2021-09-16 03:24 300阅读 0赞

新建一个 页面魔板 : 引入 JS 文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>无间隙滚动</title>
  8. </head>
  9. <style> ul{ list-style: none; } *{ padding: 0; margin: 0; } #box1{ width: 300px; height: 100px; border: 1px solid #ccc; } #box2{ width: 100px; height: 300px; border: 1px soild #cccccc; } ul li{ float: left; width: 100px; height: 100px; } </style>
  10. <body>
  11. <div id="box1">
  12. <ul>
  13. <li>1</li>
  14. <li>2</li>
  15. <li>3</li>
  16. <li>4</li>
  17. <li>5</li>
  18. </ul>
  19. </div>
  20. <br/>
  21. <hr/>
  22. <div id="box2">
  23. <ul>
  24. <li>1</li>
  25. <li>2</li>
  26. <li>3</li>
  27. <li>4</li>
  28. <li>5</li>
  29. </ul>
  30. </div>
  31. </body>
  32. <script src="scoller.js"></script>
  33. </html>

scoller.js 文件

  1. function Scroll(options){
  2. this.el = document.getElementById(options.el);
  3. this.ul = this.el.getElementsByTagName("ul")[0];
  4. this.li = this.ul.getElementsByTagName("li");
  5. this.direction = options.direction;
  6. this.speed = options.speed;
  7. this.index = 0;
  8. this.init();
  9. }
  10. Scroll.prototype = {
  11. init:function(){
  12. // 效果的开始
  13. this.li_num = this.li.length;
  14. this.el.style.overflow = 'hidden';
  15. if(this.direction == "x"){
  16. // 设置宽
  17. this.change("width","marginLeft");
  18. }else if(this.direction == "y"){
  19. // 设置高
  20. this.change("height","marginTop");
  21. }
  22. },
  23. change:function(attr1,attr2){
  24. var _this = this;
  25. // 定时器内容
  26. this.li_attr = parseInt(this.getAttr(attr1));
  27. this.ul.style[attr1] = this.li_num * this.li_attr + "px";
  28. setInterval(function() {
  29. // body...
  30. _this.index--;
  31. _this.ul.style[attr2] = _this.index + "px";
  32. if( Math.abs(_this.index) >= _this.li_attr ){
  33. _this.ul.appendChild(_this.ul.firstElementChild);
  34. _this.ul.style[attr2] = "0px";
  35. _this.index = 0;
  36. }
  37. }, _this.speed);
  38. },
  39. getAttr:function(attr){
  40. // 获取样式值的
  41. if (this.li[0].currentStyle) {
  42. return this.li[0].currentStyle[attr]
  43. }else{
  44. return getComputedStyle(this.li[0],null)[attr]
  45. }
  46. }
  47. };
  48. new Scroll({
  49. el: "box1",
  50. direction: "x",
  51. speed: 50,
  52. })
  53. new Scroll({
  54. el: "box2",
  55. direction: "y",
  56. speed: 30,
  57. })

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读

    相关 标题】封装

    通常情况下我们可以在测试类中给成员变量赋值一些合法但不合理的数据,而程序的执行过程无法检测和提示,与我们现实生活中的实际应用不太符合,为此,我们需要对成员变量进行合理的封装,与