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

推薦する

JavaScriptアップロードファイル制限パラメータケースの詳細な説明

プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...

psdカット画像をdiv+css形式に変換する

PSD から div css へのウェブページ切り取り例ステップ 1: まず、すべてのタグの内側と外...

IE8 互換性について: X-UA-compatible 属性の説明

問題の説明:コードをコピーコードは次のとおりです。 <meta http-equiv=&quo...

MySQLインデックスを追加する3つの原則を簡単に理解する

1. インデックスの重要性インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。...

MySQL データベース アカウントの作成、認証、データのエクスポートおよびインポート操作の例

この記事では、MySQL データベースでのアカウントの作成、認証、データのエクスポートおよびインポー...

MySQL グリーンバージョン設定コードと 1067 エラーの詳細

MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 &#...

HTMLページ間で値を渡す問題の解決策

初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...

MySQL データベースのエンコーディングを utf8mb4 に変更する方法

utf8mb4 エンコーディングは utf8 エンコーディングのスーパーセットであり、utf8 と互...

Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します

docker hub から es イメージ (バージョン 6.4.2) をダウンロードしました。詳細...

入力テキストボックスの長さをコンテンツに応じて変更する方法

初め:コードをコピーコードは次のとおりです。 <input type="text&q...

Vue スキャフォールディング プロジェクトを作成するための詳細な手順

vue スキャフォールディング -> vue.cli大規模で完全に機能する Vue プロジェク...

Dockerはrabbitmqのサンプルコードをインストールして実行します

イメージをプルします: [mall@VM_0_7_centos ~]$ sudo docker pu...

Vueは移動可能なフローティングボタンを実装します

この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

VUEプロジェクトでXSS攻撃に遭遇した実体験

目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...