Vue3.0 手書き拡大鏡効果

Vue3.0 手書き拡大鏡効果

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示され、離れるとマスク レイヤーが非表示になることです。

CSS のカーソル

マウスの次の効果を実現する方法: (子は父とまったく同じ) 絶対配置 + 上部と左を変更して動きを制御する

@vueuseには、ツールメソッドがあります: useMouseInElement

<テンプレート>
  <div ref="ターゲット">
    <h1>こんにちは世界</h1>
  </div>
</テンプレート>
 
<スクリプト>
'vue' から { ref } をインポートします
'@vueuse/core' から { useMouseInElement } をインポートします。
 
エクスポートデフォルト{
  設定() {
    定数ターゲット = ref(null)
 
    const { x, y, isOutside } = useMouseInElement(ターゲット)
 
    {x, y, isOutside} を返す
  }
}
</スクリプト>

これはVueUse公式サイトでの使い方です。最後に、 return { target }を忘れないようにしてください。冒頭でreturn targetをしていなかったため、x、y、isOutsideの値が0、0、falseとなり、値が変わっていませんでした。

マウスの位置とマスクの位置の関係:

 <div class="layer" :style="layerStyle"></div> //これはマスクレイヤーです setup(){ //これはマウスを実装するためのコードです const layerStyle = reactive({
      上: '0px'、
      左: '0px'
    })
    // 3つの値の変化を監視し、最初のパラメータを配列watch([elementX, elementY, isOutside], () => {で監視します
      // レイヤースタイル.left = 要素X.value / 2 + 'px'
      // レイヤースタイル.top = 要素Y.値 / 2 + 'px'
      上 = 要素Y.値 - 100 とします
      左 = 要素X.値 - 100
 
      // マスク要素に位置を割り当てる if (top < 0) top = 0
      (トップ > 200) トップ = 200
      (左 < 0)の場合、左 = 0
      (左 > 200)の場合、左 = 200
      レイヤースタイル.top = 上 + 'px'
      レイヤースタイル.left = 左 + 'px'
    })
    戻り値: { elementX, elementY, isOutside, target, layerStyle }
 
}

マスク領域は、左側の親ボックスを超えることはできません。上記の 2 行のコードはコメントアウトされています。なぜ一緒に記述できないのでしょうか。後で判断を追加する必要がある場合、判断の後に px を追加すると、どこから始めればよいか分からなくなるからです。上記のように別々に記述すると、top と left は単なる値になります。計算が完了したら、単位を追加します。

増幅効果を実現する方法:

CSSスタイルにはbackground-size属性があります。最初のパラメータは幅、2番目のパラメータは高さを表します。画像を拡大することができます。

元のサイズは400*400なので、2倍にすると800*800になります

CSSスタイルのbackground-position-xとbackground-position-yは指定された領域を拡大することができる

background-positionについて: x,y 最初の値は水平位置、2番目の値は垂直位置です

右側の div にズーム効果を適用します。

 <div class="large" :style="{ backgroundImage:`url(${images[current]})`,...largeStyle }"></div> 

これは CSS コードです。参照できます:

 。大きい {
   位置: 絶対;
    上: 0;
    左: 412px;
    幅: 400ピクセル;
    高さ: 400px;
    ボックスの影: 0 0 10px rgba(0,0,0,0.1);
    背景繰り返し: 繰り返しなし;
    背景サイズ: 800px 800px;
    背景色: #f8f8f8;
 }

最後に:マウスが左のボックス領域から外れると、マスクは非表示になり、右側の拡大されたボックスも非表示になります。

useMouseInElementのisOutSideプロパティは、監視要素を超えているかどうかを検出できます。v-show="!isOutSide"を使用するだけです。

Vue3.0 手書き虫眼鏡効果に関するこの記事はこれで終わりです。Vue3.0 手書き虫眼鏡効果に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueは製品の拡大鏡効果を実現します
  • Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード
  • Vue3は画像拡大鏡効果を実現します
  • Vueは商品詳細ページの虫眼鏡機能を実装します
  • Vueはタブ切り替えの虫眼鏡効果を実装します
  • Vueはシンプルな虫眼鏡効果を実装します
  • Vueは虫眼鏡付きの検索ボックスを実装します
  • Vue が虫眼鏡効果を実装
  • 手書きのVue拡大鏡効果
  • Vue3はJingdong製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します

<<:  Dockerボリュームコンテナ間のデータ共有の実装

>>:  Linux システム (CentOS7 インストール) に JDK8 をインストールするための詳細なチュートリアル

推薦する

JS に依存せずにレスポンシブ レイアウトを実現する CSS3 モバイル vw+rem メソッド

1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...

MySQLはJSON内部フィールドを抽出し、数値としてダンプします

目次背景問題分析1. 属性値はJson形式であり、Json操作関数を使用して処理する必要があります。...

Linux デバイス用ネットワーク ドライバーの紹介

有線ネットワーク: イーサネット 無線ネットワーク: 4G、WiFi、Bluetooth、5G 概要...

MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...

LinuxデバッガGDBの基本的な使い方の詳細な説明

目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...

この記事では、VUE の複数の DIV とボタン バインディングの Enter イベントを実装する方法を説明します。

現在、OK ボタンをクリックしたときやキーボードの Enter キーを押したときに操作を実行するとい...

Dockerコンテナにvimコマンドがない問題を解決する方法

問題を見つける今日、Docker コンテナ内のファイルを変更しようとしたところ、コンテナ内に vim...

1 行のコードでさまざまな IE 互換性の問題を解決します (IE6-IE10)

x-ua-compatible は、IE ブラウザがページを解析およびコンパイルするためのモデルを...

Ubuntu 20.04でLNMP環境を構築する方法

簡単な説明以前 Centos7 で構築し、その後個人開発環境として Ubuntu 20.04 を使っ...

Linux システムで httpd の自動インストールと構成を Ansible で実装する方法

1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

MySQL の datetime フィールドの丸め操作

目次序文1. 背景2. シミュレーションテスト3. 結論要約する序文もし私が罠に陥っていなかったら、...

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Ubuntu 18.0.4 は mysql をインストールし、エラー 1698 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されましたを解決します

序文最近 Linux を学び、その後 Win から Ubuntu に変更しました。以前インストールし...