ネイティブ 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グローバルプロキシの設定

推薦する

MYSQLについては、データ型と操作テーブルを知る必要があります

データ型と操作データテーブル1.1 MySQL 型: 整数 1.2 MySQL データ型: 浮動小数...

MYSQL の解凍版における中国語の文字化け問題の解決方法

MYSQLの解凍バージョンがインストールされます1: 解凍後、my.ini ファイルをコピーし、バイ...

Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...

Node.js のモジュール性、npm パッケージ マネージャーの説明

目次モジュール化の基本概念モジュール化とは何かモジュール分解の利点Node.js のモジュール性No...

MySQL サーバー IO 100% 分析および最適化ソリューション

序文ストレス テスト中に、リソース使用のボトルネックによって発生する最も直接的なパフォーマンスの問題...

CentOS IP接続ネットワーク実装プロセス図

1. システムにログインし、ディレクトリに入ります: cd /etc/sysconfig/netwo...

バージョン管理ツール Rational ClearCase の紹介

Rational ClearCase は、コードやその他のソフトウェア開発資産のバージョン管理を実...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

NginxはGzipアルゴリズムを使用してメッセージを圧縮します

HTTP圧縮とは場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、...

MySQL テーブルタイプ ストレージエンジンの選択

目次1. 現在のデータベース支出のストレージエンジンを表示する方法1:方法2: 2. ENGINE=...

検証コードケースのjs実装

この記事の例では、検証コードを実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

CSS チュートリアル: CSS 属性メディア タイプ

スタイルシートの最も重要な機能の 1 つは、ページ、画面、電子シンセサイザーなどの複数のメディアに適...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...