当前位置:Gxlcms > JavaScript > JavaScript实现旋转轮播图

JavaScript实现旋转轮播图

时间:2021-07-01 10:21:17 帮助过:42人阅读

最近一直在学习JavaScript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图:

这个效果是这样的:一共有7张图片,它们会自动地向左滑动,然后左右箭头也可以控制轮播图的左滑和右滑,同时,如果鼠标停在图片上,那么轮播图会停止自动滑动,当鼠标移开时,将会继续向左轮播。
首先,我这里封装了两个函数(因为暂且还没有学jQuery,所以用了封装函数的方法来实现),第一个函数是$函数,调用可以获取html中的元素,代码如下:

  1. `function $(select){
  2. if (typeof select != 'string') {
  3. console.log('传入的参数有误');
  4. return null;
  5. }
  6. var firstChar = select.charAt(0);
  7. switch(firstChar){
  8. case '#':
  9. return document.getElementById(select.substr(1));
  10. break;
  11. case '.':
  12. if (document.getElementsByClassName){
  13. return document.getElementsByClassName(select.substr(1));
  14. } else {
  15. var result = [];
  16. var allElemnts = document.getElementsByTagName('*');
  17. console.log(allElemnts);
  18. for (var i = 0; i < allElemnts.length; i++){
  19. var e = allElemnts[i];
  20. var className = e.className;
  21. var classArr = className.split(' ');
  22. for (var j = 0; j < classArr.length; j++){
  23. var c = classArr[j];
  24. if (c == select.substr(1)) {
  25. result.push(e);
  26. break;
  27. }
  28. }
  29. }
  30. return result;
  31. }
  32. break;
  33. default :
  34. return document.getElementsByTagName(select);
  35. }
  36. }`

第二个函数是一个动画函数,用json实现多条样式的动态改变,从而达到一个动画效果,代码如下: `

  1. function animate(element, json, fun) {
  2. clearInterval(element.timer);
  3. function getStyle(element, styleName){
  4. if(element.currentStyle){
  5. //ie浏览器下 直接通过currentstyle来获取
  6. //return element.currentStyle.heigh;
  7. return element.currentStyle[styleName];
  8. }else{
  9. var computedStyle = window.getComputedStyle(element,null);
  10. return computedStyle[styleName];
  11. }
  12. }
  13. var isStop = false;
  14. element.timer = setInterval(function () {
  15. isStop = true;
  16. for (var key in json){
  17. var target = json[key];
  18. var current;
  19. if (key == 'opacity') {
  20. //当动画的类型为透明度时 获取的值应该是浮点类型
  21. current = parseFloat(getStyle(element, key)) || 1;
  22. } else {
  23. //其他情况 用整数类型
  24. current = parseInt(getStyle(element, key)) || 0;
  25. }
  26. var step = (target - current) / 10;
  27. if (key != 'opacity') {
  28. step = step > 0 ? Math.ceil(step) : Math.floor(step);
  29. }
  30. current += step;
  31. if (key == 'opacity') {
  32. if (Math.abs(target - current) > 0.01) {
  33. isStop = false;
  34. } else {
  35. current = target;
  36. }
  37. element.style.opacity = current + '';
  38. } else {
  39. if (Math.abs(target-current) > Math.abs(step)) {
  40. isStop = false;
  41. } else {
  42. current = target;
  43. }
  44. if (key == 'zIndex'){
  45. element.style.zIndex = Math.round(current);
  46. } else {
  47. element.style[key] = current + 'px';
  48. }
  49. }
  50. }
  51. if (isStop) {
  52. clearInterval(element.timer);
  53. console.log('动画完成');
  54. if (typeof fun == 'function') {
  55. fun();
  56. }
  57. }
  58. }, 30);
  59. }`

接下来就要写html的部分了,因为只有几张图片,所以html的部分很简单:

  1. <body>
  2. <div class="box">
  3. <div class="content">
  4. <ul>
  5. <li><a href="#"><img src="./images/1.jpg"></a></li>
  6. <li><a href="#"><img src="./images/2.jpg"></a></li>
  7. <li><a href="#"><img src="./images/3.jpg"></a></li>
  8. <li><a href="#"><img src="./images/4.jpg" class="current"></a></li>
  9. <li><a href="#"><img src="./images/5.jpg"></a></li>
  10. <li><a href="#"><img src="./images/6.jpg"></a></li>
  11. <li><a href="#"><img src="./images/7.jpg"></a></li>
  12. </ul>
  13. </div>
  14. <div class="control">
  15. <a href="javascript:;" id="prev"></a>
  16. <a href="javascript:;" id="next"></a>
  17. </div>
  18. </div>
  19. </body>

css样式的部分也不多做叙述。

下面就是JS是部分啦,代码也很简单,理清楚就好

  1. window.onload = function(){
  2. //定位,并给图片设置大小透明度
  3. var json = [{
  4. width: 630,
  5. top: 23,
  6. left: 0,
  7. zIndex: 2,
  8. opacity: 0
  9. },{
  10. width: 630,
  11. top: 23,
  12. left: 0,
  13. zIndex: 3,
  14. opacity: 0
  15. },{
  16. width: 630,
  17. top: 23,
  18. left: 0,
  19. zIndex: 4,
  20. opacity: 0.6
  21. },{
  22. width: 730,
  23. top: 0,
  24. left: 125,
  25. zIndex: 5,
  26. opacity: 1
  27. },{
  28. width: 630,
  29. top: 23,
  30. left: 350,
  31. zIndex: 4,
  32. opacity: 0.6
  33. },{
  34. width: 630,
  35. top: 23,
  36. left: 350,
  37. zIndex: 3,
  38. opacity: 0
  39. },{
  40. width: 630,
  41. top: 23,
  42. left: 350,
  43. zIndex: 2,
  44. opacity: 0
  45. }];
  1. function refreshImageLocatin(index){
  2. //默认情况下 第i张图对应第i个位置
  3. //index=1时 第i个图对应i-1个位置
  4. //也就是第i个图对应i-index的位置
  5. var liArr = $('li');
  6. for(var i = 0; i < liArr.length; i++){
  7. var li = liArr[i];
  8. var locationIndex = i - index;
  9. console.log('i='+i);
  10. console.log('index='+index);
  11. console.log('locationIndex='+locationIndex);
  12. if(locationIndex < 0){
  13. locationIndex += 7;
  14. }
  15. var locationData = json[locationIndex];
  16. animate(li, locationData, null);
  17. }
  18. }
  19. refreshImageLocatin(0);
  20. var index = 0;
  21. $('#next').onclick = function(){
  22. index++;
  23. if(index == 7){
  24. index = 0;
  25. }
  26. refreshImageLocatin(index);
  27. }
  28. $('#prev').onclick = function(){
  29. index--;
  30. if(index < 0){
  31. index = 6;
  32. }
  33. refreshImageLocatin(index);
  34. }
  35. var nextImage = $('#next').onclick;
  36. var contentBox = $('.content')[0];
  37. //自动播放
  38. var timer = setInterval(nextImage, 3000);
  39. //当鼠标移动到图片上,停止播放
  40. contentBox.onmouseover = function(){
  41. clearInterval(timer);
  42. }
  43. contentBox.onmouseout = function(){
  44. timer = setInterval(nextImage ,3000)
  45. }
  46. }

以上就是旋转轮播图的全部内容了,给自己的学习过程做个简单的记录,也顺便巩固一下。

人气教程排行