htmlのカルーセル

CSS:

<スタイルタイプ= " テキスト/ cssの">
  * {パディング:0。マージン:0; リストスタイル:なし。ボーダー:0;}
  本体{背景色:#262626。}
  .ALL {幅:500pxなど。高さ:200pxの。パディング:7px; 国境:1pxの固体#2D2D2D。マージン:100pxに自動; 位置:相対; }
  。画面{
  幅:500pxなど。
  高さ:200pxの。
  オーバーフロー:隠されました;
  位置:相対;
  }
  .screenリー{幅:500pxなど。高さ:200pxの。オーバーフロー:隠されました; フロート:左;}
  .screen UL {位置:絶対。左:0; トップ:0PX。幅:3000px;}
  .ALLオール{位置:絶対。右:10pxの; 下:10pxの; 行の高さ:20ピクセル; テキスト整列:センター;}
  .ALLオール李{フロート:左; 幅:15ピクセル; 高さ:15ピクセル; 背景:#FFF; 余白左:5pxの; カーソル:ポインタ; フォントサイズ:10pxの; フォントファミリ:MS Pゴシック; 行の高さ:15ピクセル; 国境半径:15ピクセル; }
  .ALLオールli.current {背景:黄色;}
  </スタイル>

 

 

JS

<スクリプトタイプ= " テキスト/ javascriptの">
  window.onload =関数(){
  VARボックス=のdocument.getElementById( "すべて"); //取得する大きな箱
  VAR UL = box.children [0] .children [0]。//获取UL
  VAR ulLis = ul.children、すべての内部李// UL
  //レビュー:cloneNodeを()最終面Bにクローンノードa.appendChild(B)を追加
  // 1 UlLis [0] .cloneNode(真)クローンノード
  ul.appendChild(ulLis [0] .cloneNode(真))。ulLis [0] .cloneNode(真)是のB是// UL
   
  2 //挿入内部のliオール
  VARオール= box.children [1]; //取得オール
  //私たちは内部の番号オール李を作成したいので、ああそうforループを使用する必要があります
  ため(VAR I = 0; iが<ulLis.length-1; I ++){//長li減算1内部UL我々はクローン化されたため
  //ノード李を作成します。
  VAR李=のdocument.createElement( "李");
  li.innerHTMLは=私は+ 1; //プラス1人の関係が存在します
  // a.appendChild(B)。
  ol.appendChild(LI)。
  }
  VAR olLis = ol.children; //李オール内側見つけます
  olLis [0] .className = '現在の';
  小型のliオールを横断// 3.アニメーションのセクション
  {(; iはolLis.lengthを<I ++がVAR I = 0)のための
  olLis[i].index = i; // 赋予索引号
  olLis[i].onmouseover = function() {
  // 清除所有人
  for(var j=0;j<olLis.length;j++) {
  olLis[j].className = "";
  }
  this.className = 'current';
  animate(ul,-this.index*ulLis[0].offsetWidth);
  key = square = this.index; // 鼠标经过 key square 要等于 当前的索引号
  }
  }
  // 4. 定时器部分 难点
  var timer = null; // 定时器
  var key = 0; // 用来控制图片的播放的
  var square = 0; // 用来控制小方块的
  timer = setInterval(autoplay,3000); // 每隔3s 调用一次 autoplay
  function autoplay() {
  key++; // key == 1 先 ++
  console.log(key); // 不能超过5
  if(key > ulLis.length - 1)
  {
  // alert('停下');
  ul.style.left = 0;
  key = 1; // 因为第6张就是第一张,我们已经播放完毕了, 下一次播放第2张
  // 第2张的索引号是1
  }
  animate(ul,-key*ulLis[0].offsetWidth);
  // 小方块的做法
  square++; // 小方块自加1
  square = square>olLis.length-1 ? 0 : square;
  /// 清除所有人
  for(var i=0;i<olLis.length;i++) {
  olLis[i].className = "";
  }
  olLis[square].className = "current"; // 留下当前自己的
   
  }
   
   
  // 鼠标经过和停止定时器
  box.onmouseover = function() {
  clearInterval(timer);
  }
   
  box.onmouseout = function() {
  timer = setInterval(autoplay,3000); // 一定这么开
  }
   
   
   
  // 基本封装
  function animate(obj,target) {
  clearInterval(obj.timer); // 要开启定时器,先清除以前定时器
  // 有2个参数 第一个 对象谁做动画 第二 距离 到哪里
  // 如果 offsetLeft 大于了 target 目标位置就应该反方向
  var speed = obj.offsetLeft < target ? 15 : -15;
  obj.timer = setInterval(function() {
  var result = target - obj.offsetLeft; // 他们的值 等于 0 说明完全相等
  // 动画的原理
  obj.style.left = obj.offsetLeft + speed + "px";
  if(Math.abs(result) <= 15) {
  obj.style.left = target + "px"; //抖动问题
  clearInterval(obj.timer);
  }
  },10);
  }
   
  }
  </script>
   

 

html

<div class="all" id='all'>
  <div class="screen">
  <ul>
  <li><img src="images/1.jpg" width="500" height="200" /></li>
  <li><img src="images/2.jpg" width="500" height="200" /></li>
  <li><img src="images/3.jpg" width="500" height="200" /></li>
  <li><img src="images/4.jpg" width="500" height="200" /></li>
  <li><img src="images/5.jpg" width="500" height="200" /></li>
  </ul>
  </div>
  <ol>
  </ol>
  </div>

 

おすすめ

転載: www.cnblogs.com/lovebear123/p/11460547.html