欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript实现旋转轮播图

程序员文章站 2022-09-08 20:46:11
最近一直在学习javascript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图: 这个效果是这样的:一共...

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

JavaScript实现旋转轮播图

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

`function $(select){
    if (typeof select != 'string') {
      console.log('传入的参数有误');     
      return null;
    }
    var firstchar = select.charat(0);
    switch(firstchar){
      case '#':
        return document.getelementbyid(select.substr(1));
      break;
      case '.':
        if (document.getelementsbyclassname){
          return document.getelementsbyclassname(select.substr(1));
        } else {
          var result = [];
          var allelemnts = document.getelementsbytagname('*');
          console.log(allelemnts);
          for (var i = 0; i < allelemnts.length; i++){
            var e = allelemnts[i];
            var classname = e.classname;
            var classarr = classname.split(' ');
            for (var j = 0; j < classarr.length; j++){
              var c = classarr[j];
              if (c == select.substr(1)) {
                result.push(e);
                break;
              }
            }
          }
          return result;
        }
      break;
      default :
        return document.getelementsbytagname(select);
    }
  }`

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

function animate(element, json, fun) {
  clearinterval(element.timer);
  function getstyle(element, stylename){
    if(element.currentstyle){
      //ie浏览器下 直接通过currentstyle来获取
      //return element.currentstyle.heigh;
      return element.currentstyle[stylename];
    }else{
      var computedstyle = window.getcomputedstyle(element,null);
      return computedstyle[stylename];
    }
  }
  var isstop = false;
  element.timer = setinterval(function () {
    isstop = true;
    for (var key in json){
      var target = json[key];
      var current;
      if (key == 'opacity') {
        //当动画的类型为透明度时 获取的值应该是浮点类型
        current = parsefloat(getstyle(element, key)) || 1;
      } else {
        //其他情况 用整数类型
        current = parseint(getstyle(element, key)) || 0;
      }      
      var step = (target - current) / 10;
      if (key != 'opacity') {
        step = step > 0 ? math.ceil(step) : math.floor(step);
      }
      current += step;
      if (key == 'opacity') {
        if (math.abs(target - current) > 0.01) {
          isstop = false;
        } else {
          current = target;
        }
        element.style.opacity = current + '';
      } else {
        if (math.abs(target-current) > math.abs(step)) {
          isstop = false;
        } else {
          current = target;
        }
        if (key == 'zindex'){
          element.style.zindex = math.round(current);
        } else {
          element.style[key] = current + 'px';
        }        
      }      
    }
    if (isstop) {
      clearinterval(element.timer);
      console.log('动画完成');
      if (typeof fun == 'function') {
        fun();
      }
    }
  }, 30);
}`

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

<body>
  <div class="box">
    <div class="content">
      <ul>
        <li><a href="#"><img src="./images/1.jpg"></a></li>
        <li><a href="#"><img src="./images/2.jpg"></a></li>
        <li><a href="#"><img src="./images/3.jpg"></a></li>
        <li><a href="#"><img src="./images/4.jpg" class="current"></a></li>
        <li><a href="#"><img src="./images/5.jpg"></a></li>
        <li><a href="#"><img src="./images/6.jpg"></a></li>
        <li><a href="#"><img src="./images/7.jpg"></a></li>
      </ul>
    </div>
    <div class="control">
      <a href="javascript:;" id="prev"></a>
      <a href="javascript:;" id="next"></a>
    </div>
  </div>
</body>

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

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

 window.onload = function(){
  //定位,并给图片设置大小透明度
  var json = [{
    width: 630,
    top: 23,
    left: 0,
    zindex: 2,
    opacity: 0
  },{
    width: 630,
    top: 23,
    left: 0,
    zindex: 3,
    opacity: 0
  },{
    width: 630,
    top: 23,
    left: 0,
    zindex: 4,
    opacity: 0.6
  },{
    width: 730,
    top: 0,
    left: 125,
    zindex: 5,
    opacity: 1
  },{
    width: 630,
    top: 23,
    left: 350,
    zindex: 4,
    opacity: 0.6
  },{
    width: 630,
    top: 23,
    left: 350,
    zindex: 3,
    opacity: 0
  },{
    width: 630,
    top: 23,
    left: 350,
    zindex: 2,
    opacity: 0
  }];
function refreshimagelocatin(index){
    //默认情况下 第i张图对应第i个位置
    //index=1时 第i个图对应i-1个位置
    //也就是第i个图对应i-index的位置
    var liarr = $('li');
    for(var i = 0; i < liarr.length; i++){
      var li = liarr[i];
      var locationindex = i - index;
      console.log('i='+i);
      console.log('index='+index);
      console.log('locationindex='+locationindex);
      if(locationindex < 0){
        locationindex += 7;
      }
      var locationdata = json[locationindex];
      animate(li, locationdata, null);
    }
  }

  refreshimagelocatin(0);

  var index = 0;
  $('#next').onclick = function(){
    index++;
    if(index == 7){
      index = 0;
    }
    refreshimagelocatin(index);
  }
  $('#prev').onclick = function(){
    index--;
    if(index < 0){
      index = 6;
    }
    refreshimagelocatin(index);
  }

  var nextimage = $('#next').onclick;
  var contentbox = $('.content')[0];
  //自动播放
  var timer = setinterval(nextimage, 3000);
  //当鼠标移动到图片上,停止播放
  contentbox.onmouseover = function(){
    clearinterval(timer);
  }
  contentbox.onmouseout = function(){
    timer = setinterval(nextimage ,3000)
  }
}

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