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 関数の正しい使い方の詳細な説明

推薦する

Linux で cmake を使用して MySQL をコンパイルおよびインストールするための詳細なチュートリアル

1. cmakeをインストールする1. cmakeの圧縮パッケージを解凍する [root@mysql...

CSS で text-align と margin: 0 auto を使用して中央に配置する例コード

CSSでtext-align、margin: 0 autoを使用して中央揃えにするtext-alig...

Apple Watchのインタラクションデザインにおける4つの全く異なる体験が明らかに

今日も Watch アプリのデザインに関する話です。私はケーススタディが大好きなので、同じトピックを...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...

Ubuntu インストール時にブラックスクリーンが表示される場合の解決策 (3 種類)

私のコンピューターのグラフィック カードは Nvidia グラフィック カードです。再起動後、画面に...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

フォーム送信ページの更新がジャンプしない

1. ソースコードの設計コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

CSS属性のマージンの理解について話す

1.マージンとは何ですか?マージンは、要素の周囲のスペースの間隔を制御するために使用され、視覚的にス...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

mysql8.0.11 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと...

1 つの記事で MySQL のプリコンパイルを理解する

1. プリコンパイルの利点私たちは皆、プリコンパイル機能を備えた JDBC の PreparedSt...

外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介

MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...

XHTML: フレーム構造タグ

フレーム構造タグ <frameset></frameset>フレームを使用す...

HTML マークアップ言語 - テーブルタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

CSS の子要素の Z インデックスと親要素の兄弟ノードの階層問題を解決する

1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...