js实现简单的轮播图效果

客官°小女子只卖身不卖艺 2022-01-27 02:19 386阅读 0赞

现在大多数网站都会在页面做一个轮播效果,看着舒服,同样的内容能展示更多的内容,很方便,我在今天接触到了这个无缝轮播图,在一番调试下总算是简单实现了效果,不多说,上代码
html:

  1. <div class="top" id="top">
  2. <ul id="imgs">
  3. <li><img src="images/banner_1.jpg" alt=""></li>
  4. <li><img src="images/banner_2.png" alt=""></li>
  5. <li><img src="images/banner_3.png" alt=""></li>
  6. <li><img src="images/banner_4.png" alt=""></li>
  7. <li><img src="images/banner_5.png" alt=""></li>
  8. <li><img src="images/banner_6.png" alt=""></li>
  9. <li><img src="images/banner_7.png" alt=""></li>
  10. </ul>
  11. <ol id="oo">
  12. </ol>
  13. <a href="#" class="l" id="left"><</a>
  14. <a href="#" class="r" id="right">></a>
  15. </div>

js:

  1. <script src="common.js"></script>
  2. <script>
  3. var scrren = my$("top");//相框
  4. var imgWidth = scrren.offsetWidth;//相框的宽度
  5. var ulObj = my$("imgs");//ul
  6. var list = my$("imgs").getElementsByTagName("li");//所有的li的节点
  7. var olObj = my$("oo");//ol
  8. var btnL = my$("left");//左右两边按钮的盒子
  9. var btnR = my$("right");//左右两边按钮的盒子
  10. var index = 0;
  11. //1.创建小按钮。 根据小按钮, 切换对应的图片
  12. for(var i = 0 ; i < list.length; i++){
  13. var liObj = document.createElement("li");
  14. olObj.appendChild(liObj);
  15. liObj.setAttribute("index", i);
  16. liObj.onmouseover = function () {
  17. for(var j = 0 ; j < olObj.children.length ; j++){
  18. olObj.children[j].removeAttribute("class");
  19. }
  20. this.className = "current";
  21. //获取对应的索引
  22. var picIndex = this.getAttribute("index");
  23. animateBian(ulObj, -picIndex * imgWidth);
  24. index = this.getAttribute("index");
  25. }
  26. }
  27. olObj.firstElementChild.className = "current";
  28. //2.自动播放
  29. //克隆一个ul的第一个图片, 添加到最后面去
  30. ulObj.appendChild(ulObj.children[0].cloneNode(true));
  31. var timer = setInterval(move, 1000);
  32. index = 0;
  33. function move() {
  34. if(index >= list.length-1){
  35. //直接跳转到第一个图片
  36. index = 0;
  37. ulObj.style.left = "0px";
  38. }
  39. index++;
  40. animateBian(ulObj, -index * imgWidth);
  41. //先干掉所有的li的背景颜色
  42. for(var j = 0 ; j < olObj.children.length ; j++){
  43. olObj.children[j].removeAttribute("class");
  44. }
  45. //判断小圆点
  46. if(index == list.length -1){
  47. olObj.children[0].className = "current";
  48. }else{
  49. olObj.children[index].className = "current";
  50. }
  51. };
  52. //3.鼠标移入移出
  53. my$("top").onmouseover = function () {
  54. clearInterval(timer);
  55. }
  56. my$("top").onmouseout = function () {
  57. timer = setInterval(move, 1000);
  58. }
  59. //4.点击两边按钮
  60. my$("right").onclick = function (){
  61. move();
  62. return false;
  63. }
  64. my$("left").onclick = function () {
  65. if(index == 0){
  66. index = list.length - 1;
  67. ulObj.style.left = -index * imgWidth + "px";
  68. }
  69. index--;
  70. animateBian(ulObj, -index * imgWidth);
  71. //先干掉所有的li的背景颜色
  72. for(var j = 0 ; j < olObj.children.length ; j++){
  73. olObj.children[j].removeAttribute("class");
  74. }
  75. olObj.children[index].className = "current";
  76. return false;
  77. }
  78. </script>

common.js

  1. //变速的动画
  2. function animateBian(element,target) {
  3. clearInterval(element.timeId);
  4. element.timeId = setInterval(function () {
  5. var current = element.offsetLeft;
  6. var step =(target-current)/10;
  7. step = step>0?Math.ceil(step):Math.floor(step);
  8. current += step;
  9. if (Math.abs(target - current) > Math.abs(step)){
  10. element.style.left = current + "px";
  11. } else{
  12. clearInterval(element.timeId);
  13. element.style.left = target + "px";
  14. }
  15. },50);
  16. }
  17. // 通过id名获取的元素
  18. function my$(id) {
  19. return document.getElementById(id);
  20. }
  21. //通过标签名获取的元素
  22. function ele$(element) {
  23. return document.getElementsByTagName(element);
  24. }

这个common.js 是我在学习中不断完善的一个自用的js文件,这里只放了上边代码所用到的。效果这里不做描述,刚开是写完的时候没发现什么问题,在多次实验后发现在鼠标移入原点移到指定图片,鼠标移出图片框之后,轮播还是从之前自动轮播停止的位置开始继续,在我看来这是一个瑕疵(反正我看着不舒服),那怎么办呢?
这个情况是因为鼠标移入到原点,图片是移动了,但是所对应的index值并没有发生变化,还是自动轮播停止时的值,所以就需要我们去给index进行赋值,使它符合当前图片所对应的index,在liObj.onmouseover 中加入一句index = this.getAttribute(“index”); 这里“=”前的index是我们定义的全局变量,而后边方法中的 “index” 是我们对圆点添加的自定义属性,到这里就实现了简单的效果了。
新手总结,如有错误,请各位多提意见!

发表评论

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

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

相关阅读