この記事では、参考までに、簡単な虫眼鏡効果を実現するためのVueの具体的なコードを紹介します。具体的な内容は次のとおりです。 <テンプレート> <div> <div class="imgMerror"> <div class="smallDiv" @mousemove="move($event)" @mouseenter="enter()" @mouseleave="leave()"> <img src="/image/2017/07/26/0d6069de4916471b92da66b0da8f0ec9.jpg" alt=""> <div class="imgMask"></div> </div> <div class="bigDiv"> <img src="/image/2017/07/26/0d6069de4916471b92da66b0da8f0ec9.jpg" alt="" class="bigImg"> </div> </div> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ データ() { 戻る { } }, メソッド: { 入力(){ imgMaskDom を document.querySelector('.imgMask') とします。 bigDivDom を document.querySelector('.bigDiv') とします。 imgMaskDom.style.display = 'ブロック'; bigDivDom.style.display = 'ブロック'; }, 離れる(){ imgMaskDom を document.querySelector('.imgMask') とします。 bigDivDom を document.querySelector('.bigDiv') とします。 imgMaskDom.style.display = 'なし'; bigDivDom.style.display = 'なし'; }, 移動する{ smallDivDom を document.querySelector('.smallDiv') とします。 imgMaskDom を document.querySelector('.imgMask') とします。 bigDivDom を document.querySelector('.bigDiv') とします。 bigImgkDom を document.querySelector('.bigImg') にします。 ev = e || window.event とします。 左を ev.clientX - smallDivDom.offsetLeft - imgMaskDom.offsetWidth/2 とします。 top を ev.clientY - smallDivDom.offsetTop - imgMaskDom.offsetHeight/2 とします。 左が0以下の場合、左は0になります。 if (left > smallDivDom.offsetWidth - imgMaskDom.offsetWidth) { 左 = smallDivDom.offsetWidth - imgMaskDom.offsetWidth; } 上端が 0 の場合、上端は 0 です。 if(top > smallDivDom.offsetHeight - imgMaskDom.offsetHeight){ 上部 = smallDivDom.offsetHeight - imgMaskDom.offsetHeight; } imgMaskDom.style.left = left + 'px'; imgMaskDom.style.top = top + 'px'; //比率を移動します let precentX = left / (smallDivDom.offsetWidth-imgMaskDom.offsetWidth); precentY を top / (smallDivDom.offsetHeight - imgMaskDom.offsetHeight) とします。 bigImgkDom.style.left = precentX * (bigDivDom.offsetWidth - bigImgkDom.offsetWidth) + 'px'; bigImgkDom.style.top = precentY * (bigDivDom.offsetHeight - bigImgkDom.offsetHeight) + 'px'; } }, } </スクリプト> <スタイル lang="scss"> *{ マージン: 0; パディング: 0; } .imgMエラー{ 位置: 相対的; パディング: 50px; .smallDiv{ 境界線: 1px 実線 #ccc; 幅: 360ピクセル; 高さ: 360ピクセル; 位置: 相対的; 左: 0; 上: 0; 画像{ 幅: 100%; 高さ: 100%; } .imgマスク{ 幅: 240ピクセル; 高さ: 240px; 背景: #00ff98; 不透明度: 0.5; カーソル: 移動; 位置: 絶対; 左:0; 上: 0; 表示: なし; } } .bigDiv{ 境界線: 1px 実線 #ccc; 幅: 540ピクセル; 高さ: 540px; 位置: 相対的; 左: 380ピクセル; 上: -360px; オーバーフロー: 非表示; 表示: なし; 画像{ 幅: 600ピクセル; 高さ: 600px; 位置: 絶対; 左: 0; 上: 0; } } } </スタイル> 効果画像: 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。
>>: MySQL ストアド プロシージャのエラー処理例の詳細な説明
この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...
目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...
目次必要:発生した問題:解決する:必要:要素テーブル内の複数の列を並べ替えるには、日付の並べ替えをク...
ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...
この記事では、タブバーの切り替えコンテンツバーを簡単に実現するためのJavaScriptの具体的なコ...
述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...
1. Vue レスポンシブの使用法を確認する Vue の応答性は、私たち全員がよく知っています。 ...
列ベースの Web デザインのインスピレーションをお探しの場合は、32 個のクラシックな列/グリッド...
単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...
この記事では、CSS を使用して半透明の背景と不透明なテキストの効果を実現する方法の例を紹介します。...
プロジェクトでよくある状況として、案件リストなどのリストが存在することがあります。リスト内の項目をク...
最近、インターフェースを描画しているときに、インターフェースに垂直線を描画し、この垂直線の高さが親 ...
導入Alibaba Cloud のような OSS ストレージ サービスを使用している場合は、サービス...
CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...
BFCコンセプト:ブロック フォーマット コンテキストは、BFC 内の要素を外部の要素から分離する独...