JSはタイムラインの自動再生を実現する

JSはタイムラインの自動再生を実現する

最近、次のような効果を実装しました。再生ボタンをクリックするとタイムラインの再生が開始され、一時停止をクリックすると現在の位置で停止し、もう一度再生をクリックすると現在の位置から再生が続行されます。対応する年をクリックして切り替えることもできます。再生は自動的に一時停止します。もう一度再生をクリックすると、現在の位置から開始されます。

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8" />
  <タイトル></タイトル>
  <link rel="スタイルシート" type="text/css" href="fonts/iconfont.css" />
  <スタイルスコープ>
   ウル、
   李、
   html,
   体 {
    マージン: 0;
    パディング: 0;
   }
 
   #タイムライン {
    リストスタイル: なし;
    テキスト配置: 中央;
    背景: url('img/xuanduan.png') 9px 上繰り返しy;
   }
 
   #タイムライン li {
    背景画像: url('img/tuoyuan1.png');
    背景繰り返し: 繰り返しなし;
    背景位置: 0 15px;
    背景サイズ: 20px 20px;
    左パディング: 30px;
    高さ: 50px;
    行の高さ: 50px;
    色: #444;
    幅: 70ピクセル;
   }
 
   #タイムラインリップ{
    幅: 70ピクセル;
    カーソル: ポインタ;
    マージン: 0;
   }
 
   .biaoqian {
    背景: url('img/biaoqian.png') 2px 13px 繰り返しなし;
    ;
    背景サイズ: 60px 24px;
    色: #fff;
   }
 
   #タイムライン .selected {
    背景: url('img/tuoyuan2.png') 0 15px 繰り返しなし;
    背景サイズ: 20px 20px;
   }
 
   .スクロールシェル{
    幅: 100ピクセル;
    高さ: 96%;
    上マージン: 1.5%;
    左マージン: 20px;
    フロート: 左;
    オーバーフロー: 非表示;
   }
 
   .スクロール{
    幅: 118ピクセル;
    高さ: 103%;
    オーバーフロー:自動;
    オーバーフロー-x:非表示;
   }
  </スタイル>
 </head>
 <本文>
  <div class="scroll-shell">
   <ul style="" id="タイムライン" ref="タイムライン" @click="タイムライン($event)" class="スクロール">
 
   </ul>
   <i class="iconfont icon-bofang" id="bofangzanting" style="font-size: 38px;position: absolute;left: 25px;top: 91%;"></i>
  </div>
  <スクリプト>
   年を[2016、2017、2018、2019、2020、2021、2022]とします
   インデックスを0にする
   タイマーを null にする
   //時間軸に対応するliを作成する
   年.map(k => {
    createLi = document.createElement('li') を作成します。
    createP = document.createElement('p') とします。
    作成P.innerHTML = k
    Li を作成します。子を追加します (P を作成します)。
    タイムラインに子要素を追加します。
   })
   //デフォルトでは最初のものが選択されます var lis = document.querySelectorAll('#timeline li')
   lis[0].classList.add('選択済み')
   var ps = document.querySelectorAll('#タイムラインリップ')
   ps[0].classList.add('表裏')
 
   //クリックイベント。クリックすると対応するエフェクトに切り替わります。var ulElement = document.querySelector('#timeline')
   ulElement.onclick = 関数(e) {
    var lis = document.querySelectorAll('#timeline li')
    var ps = document.querySelectorAll('#タイムラインリップ')
    イベントをeとします || window.event
    ターゲットをevent.target || event.srcElementとします
    ターゲットタグ名 == 'P' の場合 {  
     クラス変更(ps, lis, ターゲット)
     (i = 0 とします; i < lis.length; i++) {
      console.log(lis[i].getAttribute('class'))
      if (lis[i].getAttribute('class') == 'selected') {
       // 再生ボタンをクリックしたときに再生を続行できるように、この時点でクリックされたインデックスを記憶します。index = i
       コンソール.log(インデックス)
       壊す;
      }
 
     }
    }
   }
   
   // 共通部分、すべてのスタイルをクリアし、クリック関数に対応するクラス名を追加します classChange(ps, lis, target) {
    ps.forEach(k => {
     k.classList.remove('biaoqian')
    })
    target.classList.add('biaoqian')
    lis.forEach(v => {
     v.classList.remove('選択済み')
    })
    target.parentNode.classList.add('選択済み')
   }
 
   //再生ボタンと一時停止ボタン let bofangzanting = document.getElementById('bofangzanting')
   if (bofangzanting) {
    bofangzanting.onclick = () => {
     if (bofangzanting.className.indexOf('bofang') != -1) {
      console.log('クリックして再生')
      console.log(タイマー)
      bofangzanting.classList.remove('icon-bofang')
      bofangzanting.classList.add('アイコンザンティング')
      if (タイマー == 未定義) {
       自動再生()
      }
     } それ以外 {
      console.log('クリックして一時停止')
      bofangzanting.classList.remove('icon-zanting')
      bofangzanting.classList.add('icon-bofang')
      if (タイマー) {
       タイマー = clearInterval(タイマー)
      } それ以外 {
       戻る
      }
     }
    }
   }
 
   //自動再生関数 autoPlay() {
    var lis = document.querySelectorAll('#timeline li')
    var ps = document.querySelectorAll('#タイムラインリップ')
    タイマー = setInterval(() => {
     console.log('自動再生!')
     (インデックス<ps.length-1)の場合{
       //次のclassChange(ps, lis, ps[index + 1])を実行します
      インデックス++
     } それ以外 {
       // 先頭にジャンプ index = 0                
      クラス変更(ps, lis, ps[インデックス])
     }
     コンソール.log(インデックス)
    }, 1000)
   }
  </スクリプト>
 </本文>
</html>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JSはオーディオが特定の時点で再生されることを指定します

<<:  MySQLデッドロック問題の詳細な分析

>>:  MySQL の if 関数の正しい使い方の詳細な説明

推薦する

スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)

効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...

Vue で棒グラフを使用し、自分で設定を変更する方法

1. HTMLファイルでechartをインポートする <!-- echarts をインポート ...

Centos6.5 でのスーパーバイザーのアップグレード、インストール、および構成に関するチュートリアル

スーパーバイザー紹介Supervisor は、Python で開発されたクライアント/サーバー サー...

ブラウザをJavaScriptで対話させる方法

目次1. 最も単純な例2. 音声の速度とピッチをカスタマイズする3. 音量の調整方法4. よく使われ...

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

デザインスキルを向上させる良い方法

いわゆる才能(左脳と右脳)つまり、芸術的な才能があるかどうかは、人間の左脳と右脳の分業によって主に決...

Ckeditor + Ckfinderを使用したJavaScriptファイルアップロードケースの詳細な説明

目次1. 準備2. 減圧3. 統合を開始する1. 準備Ckeditor_4.5.7_full + C...

シンプルなカルーセル効果を実現するJavaScript

カルーセルとは何ですか?カルーセル: モジュールまたはウィンドウで、コンピューターでマウスをクリック...

IE6 の select を div でカバーできないバグの解決方法

div を使用してマスクを作成したり、ポップアップ ウィンドウをシミュレートしたりします。ただし、I...

Vue パッケージ化後の空白ページの解決策

1. vue-cli がプロジェクト パッケージを作成した後にページが空白になる問題の解決方法コマン...

JavaScript スクリプトが実行されるタイミングの詳細な説明

JavaScript スクリプトは HTML 内のどこにでも埋め込むことができますが、いつ呼び出され...

...

CSS3で実装されたグラデーションスライド効果

成果を達成する コードhtml <div class="css-slideshow&...

Windows で MySQL データベースを別のディスクに移動する

序文今日、MySQL をインストールしたところ、データベース ストレージがデフォルトで C ドライブ...

ウェブサイトのコンテンツの100~1%はナビゲーションである

ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...