ネイティブ js でカスタム スクロール バーを実装する

ネイティブ js でカスタム スクロール バーを実装する

この記事の例では、カスタムスクロールバーを実装するためのjsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. HTMLファイル

Div1 はスクロール バー、div2 はスクロール ボール、div3 はテキスト領域コンテナー、div4 はテキスト領域です。

<div id="div">
 <div id="div1">
 <div id="div2"> </div>
 </div>
 <div id="div3">
 <div id="div4">
 <p>CSS3 チュートリアル</p>
 <p>CSS3 チュートリアル</p>
 <p>CSS3 入門</p>
 <p>CSS3 境界線</p>
 <p>CSS3 丸い角</p>
 <p>CSS3 背景</p>
 <p>CSS3 グラデーション</p>
 <p>CSS3 テキスト効果</p>
 <p>CSS3 フォント</p>
 <p>CSS3 2D 変換</p>
 CSS3 3D 変換
 <p>CSS3 トランジション</p>
 <p>CSS3 アニメーション</p>
 <p>CSS3 複数列</p>
 <p>CSS3 ユーザー インターフェース</p>
 <p>CSS3 画像</p>
 <p>CSS3 ボタン</p>
 <p>CSS3 ページネーション</p>
 <p>CSS3 ボックス サイズ</p>
 <p>CSS3 フレキシブル ボックス</p>
 <p>CSS3 マルチメディア クエリ</p>
 <p>CSS3 マルチメディア クエリの例</p>
 </div>
 </div>
</div>

2.cssスタイルファイル

コンテナはオーバーフローによって非表示になり、テキスト領域は絶対位置に配置され、その後、処理のために js に渡されます。

*{パディング: 0; マージン: 0;}
#div{top:200px;left:25%;width: 50%;height: 300px;position: absolute; 
}
#div1{幅: 20px; 高さ: 300px; 位置: 相対; 
背景: #CCCCCC; 境界線の半径: 28px; フロート: 右; カーソル: ポインター;}
#div1 #div2{左: -4px;幅: 28px;高さ: 28px;境界線の半径: 50%;背景: 赤;
位置: 絶対;}

#div3{幅: 90%; 高さ: 300px; 境界線: 2px 実線 #CCCCCC;
位置: 相対; フロート: 左; オーバーフロー: 非表示;}
#div3 #div4{top:0;left:0;width: 100%; position: absolute; font-family: "Microsoft YaHei";
フォントサイズ: 19px; 文字間隔: 1px; パディング: 3px 6px;}

3.js スクリプトコード

window.onload = 関数(){
 var allDiv = document.getElementById('div');
 var oDiv = document.getElementById('div2');
 var aDiv = document.getElementById('div1');
 var textDiv1 = document.getElementById('div3');
 var textDiv2 = document.getElementById('div4');
 
 // プログレスバーがドラッグされ、コンテンツはモーションイベントに従います oDiv.onmousedown = function (ev) {
 var oEvent =ev||イベント;
 
 var disY =oEvent.clientY -oDiv.offsetTop;
 
 oDiv.setCapture の場合 {
 oDiv.onmousemove =マウス移動;
 oDiv.onmouseup =マウスアップ;
 
 oDiv.setCapture();
 }それ以外{
 document.onmousemove =マウス移動;
 document.onmouseup =マウスアップ;
 }
 
 関数mouseMove(ev){
 var oEvent =ev||イベント; 
 var t =oEvent.clientY -disY; 
 var bottomLine = aDiv.offsetHeight - oDiv.offsetHeight; 
 
 
 t < 0の場合{
 t =0;
 }そうでない場合(t >bottomLine){
 t = ボトムライン;
 }
 
  varパーセント =t/272;
  
 oDiv.style.top = t+'px';
 textDiv2.style.top =-(textDiv2.offsetHeight-textDiv1.offsetHeight)*パーセント+'px';
 
 };
 
 関数mouseUp(){
 this.onmousemove = null;
 this.onmouseup = null;
 
 oDiv.releaseCapture の場合 {
 oDiv.releaseCapture();
 }
 };
 
 false を返します。
 };
 
 // プログレスバーをクリックしてタイマーを開始します。ボールが一定の速度でターゲットに到達したら、タイマーをクリアします。aDiv.onmousedown=function(ev){
 var oEvent =ev||イベント; 
 var divY =oEvent.clientY-allDiv.offsetTop;
 var タイマー =null;var 速度 = 10;
 
 
 クリアインターバル(タイマー)
 タイマー = setInterval(関数(){
 var パーセント = oDiv.offsetTop / 272;
 
 
 oDiv.offsetTop<divY-28){
 oDiv.style.top = oDiv.offsetTop + スピード + 'px';
 textDiv2.style.top = -(textDiv2.offsetHeight-textDiv1.offsetHeight)*パーセント + 'px';
 }それ以外の場合(oDiv.offsetTop>divY){
 oDiv.style.top = oDiv.offsetTop - 速度 + 'px';
 textDiv2.style.top = -(textDiv2.offsetHeight-textDiv1.offsetHeight)*パーセント + 'px';
 }それ以外の場合(oDiv.offsetTop>260){
 oDiv.offsetTop = 272+'px';
 タイマーの間隔をクリアします。
 }それ以外の場合(oDiv.offsetTop<10){
 oDiv.offsetTop = 0+'px';
 タイマーの間隔をクリアします。
 }それ以外{
 タイマーの間隔をクリアします。
 }
 
 
 },10);
 
 }
 
}

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

以下もご興味があるかもしれません:
  • ネイティブ js はカスタム スクロール バー コンポーネントを実装します
  • jsはスクロールバーの自動スクロールを実現します
  • Vue.js デスクトップ カスタム スクロール バー コンポーネント 美化 スクロール バー VScroll
  • JS カスタムスクロールバー効果
  • JavaScript でシンプルなチャット ダイアログ ボックス (スクロール バー付き) を実装します。
  • js ホイール イベントを使用した js カスタム スクロール バーの実装
  • JS はスクロールバーを底まで押してさらに読み込むように実装します
  • js を使用してシンプルなスクロールバーのプロセス分析を実装する
  • スクロールバーを非表示にするlayer.jsオープン例
  • Vue pure jsはスクロールバーを一番下まで監視します
  • JavaScriptはスクロールバーの位置を取得し、ページをアンカーポイントまでスライドします。

<<:  MySQLリモート接続失敗の解決策

>>:  Linux環境でのshadowsocks+polipoグローバルプロキシの設定

推薦する

Vue.js での $emit の使用に関する詳細な説明

1. 親コンポーネントは props を使用して子コンポーネントにデータを渡すことができます。 2....

Spark RDD をデータフレームに変換し、それを MySQL に書き込む例

DataframeはSpark 1.3.0で導入された新しいAPIで、Sparkで大規模な構造化デー...

CentOS のクローン作成、Linux 仮想マシンの共有の完全な手順

序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...

MAC で MySQL の初期パスワードを変更する方法

問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...

HTMLノードの追加と削除の簡単な例

HTML ノードの追加と削除の簡単な例 HTML ノードの追加と削除の簡単な例<input t...

花火効果を実現するJavaScript(オブジェクト指向)

この記事では、花火効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具...

Ubuntu は、Mysql+Keepalived の高可用性実装 (デュアルアクティブ ホットスタンバイ) を構築します。

Mysql5.5 デュアルマシン ホットスタンバイ実装 2つのMySQLをインストールするMySQ...

超詳細なMySQL使用仕様の共有

最近、データベース関連の操作が多くなり、会社の既存の仕様はあまり包括的ではありません。インターネット...

Linux で XFS パーティション形式のルート ディレクトリを縮小する方法

目次序文システム環境現在のシステムパーティションレイアウトデータのバックアップレスキューモードに入る...

VMware 仮想マシン (CentOS7 イメージ) を使用して Linux をインストールする

1. VMwareのダウンロードとインストールリンク: https://www.jb51.net/s...

HTMLフォーム属性のreadonlyとdisabledの使い方

1. readonly 読み取り専用属性なので、値を取得できます2. 無効: 無効な属性、値を取得で...

Vue でバイナリ ファイル ストリームを受信して​​ PDF プレビューを実現する方法

バックグラウンド コントローラー @RequestMapping("/getPDFStre...

CentOS 7.4 64 ビット版に MySQL 8.0 をインストールして設定するための詳細な手順

ステップ1: MySQL YUMソースを取得するMySQLの公式サイトにアクセスして、RPMパッケー...

システムエラー 1067 を解決するための MySQL データベース グリーン バージョンのインストール チュートリアル

ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...

Linux 上の Nginx に複数のバージョンの PHP をインストールする

サーバーの LNPM 環境をインストールして構成する場合、複数のバージョンの PHP の共存を考慮す...