ウィンドウ表示効果を実現するJavaScript

ウィンドウ表示効果を実現するJavaScript

この記事では、ウィンドウ表示効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

1.まず足場を組む

* {
            マージン: 0;
            パディング: 0;
        }
        
        。箱 {
            幅: 800ピクセル;
            高さ: 190ピクセル;
            境界線: 1px実線 #000;
            マージン: 100px 自動;
        }
        
        ul {
            リストスタイル: なし;
            ディスプレイ: フレックス;
        }
        
        ul画像{
            垂直方向の位置合わせ: 上;
        }
        
        。進捗 {
            幅: 100%;
            高さ: 30px;
            背景: #ccc;
        }
        
        .progress>.line {
            幅: 100ピクセル;
            高さ: 100%;
            背景: オレンジ;
            境界線の半径: 15px;
 }
<div class="box">
        <ul>
            <li>
                <img src="images/img1.jpg" alt="">
            </li>
            <li>
                <img src="images/img2.jpg" alt="">
            </li>
            <li>
                <img src="images/img3.jpg" alt="">
            </li>
            <li>
                <img src="images/img4.jpg" alt="">
            </li>
            <li>
                <img src="images/img5.jpg" alt="">
            </li>
            <li>
                <img src="images/img6.jpg" alt="">
            </li>
            <li>
                <img src="images/img7.jpg" alt="">
            </li>
            <li>
                <img src="images/img8.jpg" alt="">
            </li>
            <li>
                <img src="images/img9.jpg" alt="">
            </li>
            <li>
                <img src="images/img10.jpg" alt="">
            </li>
        </ul>
        <div class="進捗">
            <div class="line"></div>
        </div>
</div>

2. 論理部分

操作が必要な要素を取得する

ulの幅を計算する

ulの幅を設定する

スクロールバーの幅を計算する

スクロールバーの幅を設定する

マウスクリックイベントをリッスンする

  • スクロールバーの現在の位置を取得する
  • スクロールバーで押されたマウスの位置を取得します

マウス移動イベントのリッスン

  • スクロールバー内でマウスを移動した後の位置を取得します
  • オフセットを計算する
  • 安全チェック
  • スクロールバーの位置を変更する
  • 画像のスクロール距離を計算する
  • 画像の位置を変更する
 。箱 {
           オーバーフロー: 非表示;
        }
        
        ul {
            位置: 相対的;
        }
        
        。進捗 {
            位置: 相対的;
        }
        
        .progress>.line {
            位置: 絶対;
            左: 0;
            上: 0;
  }
//1. 操作対象となる要素を取得します。const oUl = document.querySelector("ul");
const oItems = oUl.querySelectorAll("li");
const oProgress = document.querySelector(".progress");
const oLine = document.querySelector(".line");
const oBox = document.querySelector(".box");
 
//2. ulの幅を計算します。const ulWidth = oItems[0].offsetWidth * oItems.length;
 
//3. ul の幅を設定します。oUl.style.width = ulWidth + 'px';
 
//4. スクロール バーの幅を計算します // スクロール バーの幅 / スクロール バーのスクロール範囲 = コンテナーの幅 / コンテンツの範囲 const progressWidth = oProgress.offsetWidth;
定数ボックス幅 = oBox.オフセット幅;
const lineWidth = boxWidth / ulWidth * progressWidth;
 
//5. スクロールバーの幅を設定します。oLine.style.width = lineWidth + 'px';
// スクロールバーの最大スクロール範囲を計算します。const maxLineX = progressWidth - lineWidth;
// 画像の最大スクロール範囲を計算します。const maxImgX = boxWidth - ulWidth;
 
 //6. マウスが押されたイベントをリッスンする oLine.onmousedown = function(e) {

e = e || ウィンドウ.e;
//a. スクロールバーの現在の位置を取得します。let begin = parseFloat(oLine.style.left) || 0;
 
//b. スクロールバーでマウスが押された位置を取得します。let mouseX = e.pageX - oBox.offsetLeft;
 
//7. マウス移動イベントをリッスンする oLine.onmousemove = function(e) {
e = e || ウィンドウ.e;
//c. スクロールバー内でマウスを移動した後の位置を取得します。let moveMouseX = e.pageX - oBox.offsetLeft;
 
//d. オフセットを計算します。let offsetX = moveMouseX - mouseX + begin;
 
//e. 安全性チェック offsetX = offsetX < 0 ? 0 : offsetX;
offsetX = offsetX > maxLineX ? maxLineX : offsetX;
 
 //f. スクロールバーの位置をリセットします。oLine.style.left = offsetX + 'px';
 
//g. 画像のスクロール距離を計算します // スクロールバーのスクロール距離 / スクロールバーの最大スクロール範囲 = 画像のスクロール距離 / 画像の最大スクロール範囲 // スクロールバーのスクロール距離 / スクロールバーの最大スクロール範囲 * 画像の最大スクロール範囲 = 画像のスクロール距離 const imgOffsetX = offsetX / maxLineX * maxImgX;
 
// h. 画像の位置をリセットします oUl.style.left = imgOffsetX + "px";
            };
        };
        document.onmouseup = 関数() {
            oLine.onmousemove = null;
} 

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

以下もご興味があるかもしれません:
  • ウィンドウ表示効果を実現するjs
  • JSが商品ウィンドウの特殊効果を実現

<<:  CSS ロリポップを描くサンプルコード

>>:  Docker での Redis の最も詳細なインストールと構成 (画像とテキスト付き)

推薦する

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...

TS 数値区切り文字とより厳密なクラス属性チェックの詳細な説明

目次概要演算子の改良と正確なinstanceofよりスマートなオブジェクトリテラル推論固有のシンボル...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

ウェブページを作る前に、これらのいわゆる仕様を見てみましょう

この記事では、Web ページを作成する前に確認すべき、いわゆる仕様をいくつかまとめました。皆様のお役...

CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装

Apollo オープンソース アドレス: https://github.com/ctripcorp/...

MySQL コピーテーブルと許可分析の 3 つの実装方法

テーブルを素早くコピーする方法まず、テーブル db1.t を作成し、1000 行のデータを挿入します...

Vue Element フロントエンドアプリケーション開発: Vuex での API ストアビューの使用

目次概要1. フロントエンドとバックエンドの分離とWeb APIの優先ルート設計2. Axiosネッ...

MySQL 学習データベースバックアップの詳細な説明

目次1.DB、DBMS、SQL 2. データベースの特徴3. SQL分類4. MySQLを起動および...

Axios はリクエストをキャンセルし、重複リクエストを回避します

目次起源現状リクエストをキャンセル cancelTokenリクエスト方法の変更重複したリクエストを避...

Firefox または IE でスパン幅が決定されない場合の解決策

コードをコピーコードは次のとおりです。 <html xmlns="http://ww...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...

Linuxはデータディスクがアンインストールされ、新しいカスタムイメージを作成できることを確認します。

カスタムイメージに関するよくある質問データディスクを表示するにはどうすればいいですか? df コマン...

繰り返し送信、繰り返し更新、バックオフ防止に関する問題と解決策の分析

1つ。序文<br />この種の質問は、どの専門掲示板でも見かけます。Google で検索...

CentOS6.5 でファイル共有サービス Samba を構築するチュートリアル

Samba サービス:このコンテンツはサンバサービス学習者の参考用ですケースの説明:企業の管理者は、...

MySQL インデックス プッシュダウンを 5 分で学ぶ

目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...