ホームページ >ウェブフロントエンド >jsチュートリアル >イラストjs画像カルーセル効果_javascriptスキル

イラストjs画像カルーセル効果_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 15:24:381362ブラウズ

この記事の例では、js 画像カルーセル効果の実装原理を説明し、参考として皆さんに共有します。具体的な内容は次のとおりです。

2 つの画像カルーセル実装ソリューション。まず効果の比較を見てみましょう:

オプション 1:

原則: 画像を一列に並べ、左から右にスクロールして視野に入り、最後の画像までスクロールする場合は、右から左にスクロールして最初の画像に戻ります。この欠点は、最後の画像までスクロールするときに逆方向になり、スクロール プロセス全体が一貫性を持たなくなることです。

オプション 2:

実装原理図

原則:

1. カルーセル プロセスには、ステージ (緑のフレーム)、待機エリア (黒のフレーム)、キューイング エリア (赤のフレーム)、および 2 つの配列 A と B といういくつかの重要な要素があります。 A は、表示中および次に表示される写真 (写真 1 と 2) を保存するために使用されます。B は、写真 5、4、および 3 など、表示を待っている写真を保存するために使用されます。

2. カルーセルの各ステップで行う必要があることは次のとおりです:

A が行う必要があるのは、最初の要素を左に移動し、2 番目の要素を表示領域の左に移動してから、最初の要素を A から移動して B の最初の位置に接合することです。

B が行う必要があるのは、その最後の要素を待機領域 (つまり、図 2 が現在配置されている場所) に移動して待機し、その後、最後の要素を B からポップして A にプッシュすることです。

コード:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>图片轮播-v2</title>
  <style>

    ul{
      margin: 0;
      padding: 0;
      list-style: none;

    }

    .sliderWrap{
      width: 200px;
      height: 112px;
      overflow: hidden;
      margin: 0 auto;
    }
    .sliderWrap ul{
      position: relative;
      width: 1000px;
      transition: left .5s ease;
      left: 0;
    }
    .sliderWrap li{
      position: relative;
      float: left;
    }
    .sliderWrap ul li img{
      width: 100%;
    }
  </style>
</head>
<body>
<div class="sliderWrap">
  <ul id="slider">
    <li><img src="images/slider/slider1.jpg" alt=""></li>
    <li><img src="images/slider/slider2.jpg" alt=""></li>
    <li><img src="images/slider/slider3.jpg" alt=""></li>
    <li><img src="images/slider/slider4.jpg" alt=""></li>
  </ul>
</div>
<input type="button" value="click me" id="next"/>
<script>
  /**
   * 图片轮播
   * @type {Element}
   */
  var btn = document.getElementById("next");
  var dom = document.getElementById("slider");
  var liArr = dom.getElementsByTagName("li");

  var curWidth = 200;
  var ulWidth = curWidth * liArr.length;
  var show = [];
  var circle = [];

  var goAway = "translate(-" + curWidth +"px, 0) translateZ(0px)";
  var goIn = "translate(0, 0) translateZ(0px)";
  var goPre = "translate(" + curWidth +"px, 0) translateZ(0px)";

  //保证所有li在ul中能在一行内放下
  dom.style.width = ulWidth + "px";

  for(var i = 0, len = liArr.length; i < len; i++){
    var curLi = liArr[i];

    curLi.setAttribute("data-index", i);
    curLi.style.width = curWidth + "px";

    if(i == 0){
      curLi.style.left = 0;
      show.push(curLi);
    }else{
      curLi.style.left = - curWidth * i + "px";
      if(i > 1){
        translate(curLi, goAway, '')
        circle.push(curLi);
      }else{
        show.push(curLi);
        translate(curLi, goPre, '');
      }
    }


  }

  circle.reverse();

  btn.onclick = function(){
    //已展示的图片滚粗
    var showFirst = show.shift();
    translate(showFirst, goAway, "300ms");

    //正在展示的图片
    translate(show[0], goIn, "300ms");
    circle.splice(0, 0, showFirst);

    //准备好下一个将要展示的图片
    var nextPre = circle.pop();
    translate(nextPre, goPre, "0ms");
    show.push(nextPre);

  };

  function translate(dom, goType, time){
    dom.style.transform =
        dom.style.webkitTransform =
            dom.style.mozTransform =
                dom.style.msTransform =
                    dom.style.oTransform = goType;

    dom.style.transitionDuration =
        dom.style.webkitTransitionDuration =
            dom.style.mozTransitionDuration =
                dom.style.msTransitionDuration =
                    dom.oTransitionDuration = time;


  }

</script>
</body>
</html>

上記は、js 画像カルーセル効果の実装原理と詳細なコードです。皆様の JavaScript プログラミングの学習に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。