自動ロック画面機能を実現するjs

自動ロック画面機能を実現するjs

1. 使用シナリオ

このような要件があるため、システムが開発されました。ユーザーがデスクトップを離れたり、一定時間操作しなかったりすると、デスクトップのロック画面と同様に、システムの開いているすべてのページがロックされる必要があります。確認のためにパスワードを正常に入力するか、再度ログインした後にのみ、ページを操作し続けることができます。ページが更新された場合、ロックされたままにする必要があります。下の写真の通りです。もちろん、ユーザーはロック画面を手動で起動することもできます。目的は、他人がシステムの重要なコンテンツに恣意的にアクセスするのを防ぐことです。では、これをどうやって達成するのでしょうか?

5s ロック画面効果は次のとおりです。

2. アイデア

  1. まず、ページがロックされているかどうかを示す変数 isLock が必要です。複数のページでこのデータを共有する必要があり、更新後も取得できるため、localStorage を使用してローカルに保存します。 isLock が true の場合、ロック画面スタイルが表示されます。
  2. タイマーのsetTimeoutを設定します。たとえば、コードで、n秒間操作がないと画面がロックされるようにページを設定した場合、n秒後にロック画面操作lockPro()を実行します。つまり、var timer = setTimeout(lockPro, n)
  3. ウィンドウのmousemoveイベントを監視し、ユーザーのマウスの動きを監視し、画面がロックされているかどうかを判断する必要があります。ロックされている場合は何もしません。画面がロックされていない場合は、各マウスの動きの時間を記録する変数moveTimeを設定し、localStorageに保存し、タイマーをクリアしてタイマーをリセットします。
  4. setInterval は isLock をポーリングしてリッスンし、1 秒ごとに取得して、ロック画面の状態を時間内に取得します。
  5. ロック画面操作 lockPro は、現在の時刻と最後のマウス操作の時刻 (moveTime) の差を判定します。n 秒未満の場合、画面をロックする必要がないと判断されます。n 秒以上の場合、画面をロックする必要があり、ロック画面のステータス isLock が更新されます。
  6. 状態がロックされていると判断した後、タイマーをクリアしてタイミング タスクを終了します。
  7. 状態がロック解除されたと判断した後、タイマーをリセットします。つまり、まずタイマーをクリアしてからタイマーを設定します。
  8. ログアウトすると、ローカル キャッシュ isLock がクリアされます。
  9. パスワードがロック解除されたら、ローカル キャッシュ isLock をクリアし、moveTime をリセットし、タイマーをリセットします。

少し混乱しているので、整理する必要があります。

3. コードの実装

以下のコードは不完全であり、HTML 構造は省略されており、自由に使用できます。

// アプリ.vue

データ () {
  戻る {
    タイムアウト: 5000、
    タイマー: null、
    isLock: 'false'
  }
},
マウントされた(){
  this.timer = setTimeout(this.lockPro、this.timeOut)
  // 初回の操作時間を設定する localStorage.setItem('moveTime', Date.now())
  //最初の判定ステータス this.modalStatus()
  // ポーリング監視ステータス setInterval(this.modalStatus, 1000)
  // マウスイベントをリッスンする this.events()
},
方法:{
   イベント() {
      ウィンドウ.onmousemove = () => {
        // console.log('マウスが移動しました')
        ロックされている場合
          localStorage.setItem('moveTime', Date.now())
          this.clearLocaPro('続行')
        }
      }
    },
    モーダルステータス() {
      localStorage.getItem('isLock') が 'true' の場合 {
        // console.log('画面がロックされています')
        this.isLock = true
        this.clearLocaPro()
      } それ以外 {
        // console.log('現在画面はロックされていません')
        this.isLock = false
        this.clearLocaPro('続行')
      }
    },
    ロックプロ() {
      もし (!this.timeOut) {
        localStorage.setItem('isLock', 'false')
        this.clearLocaPro('続行')
        戻る
      }
      Date.now() - localStorage.getItem('moveTime') < this.timeOut) の場合 {
        localStorage.setItem('isLock', 'false')
        this.clearLocaPro('続行')
      } それ以外 {
        localStorage.setItem('isLock', 'true')
        this.clearLocaPro()
      }
    },
    clearLocaPro(ステータス) {
      if(this.timer){
         タイムアウトをクリアします(this.timer)
      }
      if (ステータス === '続行') {
        this.timer = setTimeout(this.lockPro、this.timeOut)
      }
    },
    // 手動ロック handleLock(){
      this.clearLocaPro()
      localStorage.setItem('isLock', 'true')
    },
    // パスワードロック解除 unlock(){
      localStorage.removeItem('isLock')
      localStorage.setItem('moveTime', Date.now())
      this.clearLocaPro('続行')
    },
    ...
    // ログアウト時にisLockをクリアすることを忘れないでください
}

js を使用した自動画面ロックの実装方法についてはこれで終わりです。js を使用した自動画面ロックの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS を使用してポップアップ レイヤーを追加し、ロック画面操作を完了する例
  • JavaScript に基づく全画面透明マスク div レイヤー ロック画面効果の実装
  • シンプルなロック画面機能を実現する js の例
  • jsロック画面ソリューションは$.ajaxをカプセル化することで実現されます
  • jsはポップアップレイヤーを書き込み、画面効果をロックしてコードを実現します

<<:  1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

>>:  Linux で Golang をインストールする方法

推薦する

deepin20 で NVIDIA クローズドソース ドライバーをインストールするための詳細な手順

ステップ1: ディープ「グラフィックドライバー」をインストールするdeepin v20にはデフォルト...

WeChat アプレット wxss で外部 CSS ファイルとアイコンフォントを参照する方法

原因外部ファイルをミニプログラムにインポートする方法は次のとおりです: @import "...

TSオブジェクトのスプレッド演算子とレスト演算子の詳細な説明

目次概要オブジェクトの残り属性オブジェクトの拡張プロパティオブジェクトの浅いコピーを作成するkeyo...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

MySQL学習記録: KEYパーティションが引き起こした血なまぐさい事件

需要背景ビジネス テーブル tb_image のデータの一部は次のとおりです。id は一意ですが、i...

Centos6.5 に zabbix2.4 をインストールするチュートリアル図

centos-DVD1バージョンシステムの固定IPアドレスは192.168.159.128で、cen...

Reactホームページの読み込みが遅い問題のパフォーマンス最適化事例の詳細な説明

しばらくReactを勉強した後、実践してみたいと思います。そこで、個人のブログのウェブサイトを再構築...

Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

環境: CentOS 7公式ドキュメント: http://supervisord.org/インストー...

Nginx プロキシ転送構成を通じてクロスドメイン API プロキシ転送を実装する方法

序文WEB 開発では、クロスドメイン リクエストが頻繁に発生します。クロスドメインの問題を解決する方...

jQueryで劇場の座席選択と予約の効果を実現

jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...

Dockerコンテナを使用してホストネットワークにアクセスする方法

最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステム...

TypeScript 列挙型

目次1. 概要2. デジタル列挙2.1 逆マッピング3. 文字列の列挙4. const列挙5. まと...

Dockerレジストリイメージ同期の実装アイデア

はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...

Linux での MySQL のアンインストールとインストールのグラフィック チュートリアル

ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...