CSS3 を使用して、マウスが画像上をスライドするときに方向を感知するクールな 3D アニメーションを作成する方法
この記事では主に、方向感知機能を備えたマウスオーバー画像のクールな 3D アニメーションを作成する CSS3 について詳しく紹介します。これは一定の参考価値があり、最新の主流ブラウザーと互換性があります。興味のある方は、
を参照してください。これは、CSS3 と少しの JS を使用して、マウスが画像上をスライドする方向検知機能を備えたクールな 3D アニメーション特殊効果です。特殊効果では、ユーザーのマウスがグリッド内の画像上をスライドすると、3D 反転アニメーションがグリッド内のコンテンツ マスク レイヤーに表示され、方向検知機能があり、マウス入力の方向から反転を開始できます。エフェクトはとてもクールです。
##オンライン プレビュー ソース コードのダウンロード
HTML 構造
方向依存のマウスオーバー アニメーションの HTML 構造は、順序なしリストの HTML 構造を使用してグリッド レイアウトを作成します。各グリッドはプレースホルダーとして
<p class='container'> <ul> <li> <a class='normal' href='#'> <svg viewBox='0 0 80 76' x='0px' y='0px'> <g> <path d='M 68.9708 24.8623 L 60.4554 2.3018 ...... 68.0625 Z'></path> </g> </svg> </a> <p class='info'> <h3>...</h3> <p>....</p> </p> </li> ...... </ul> </p>
CSS スタイル
グリッド レイアウト全体は順序なしリストを使用して作成され、すべての li 要素はフローティングのままになります。
ul { padding: 0; margin: 0 0 50px; } ul:after { content: ""; display: table; clear: both; } li { position: relative; float: left; width: 200px; height: 200px; margin: 5px; padding: 0; list-style: none; } li a { display: inline-block; vertical-align: top; text-decoration: none; border-radius: 4px; }
同時に、3D 効果を作成するために、各 li 要素にパースペクティブ属性を追加します。
li { -webkit-perspective: 400px; perspective: 400px; }
3D 反転の作成に使用されるマスク レイヤー p.info は、デフォルトで幅 100%、高さ 100% に設定され、左上隅から始まる絶対位置が使用されます。次に、rotate3d() 関数を使用して、X 軸に沿って時計回りに 90 度回転し、非表示にします。
.info { -webkit-transform: rotate3d(1, 0, 0, 90deg); transform: rotate3d(1, 0, 0, 90deg); width: 100%; height: 100%; padding: 20px; position: absolute; top: 0; left: 0; border-radius: 4px; pointer-events: none; background-color: rgba(26, 188, 156, 0.9); }
最後に、CSS スタイルでは、マウスが上下左右の 4 方向から出入りする場合のクラスがあらかじめ設定されており、これらのクラスは JavaScript を使用して検出されます。マウスがグリッドに入ったときのマウスの進入方向を示し、それに対応するクラスを追加します。
.in-top .info { -webkit-transform-origin: 50% 0%; transform-origin: 50% 0%; -webkit-animation: in-top 300ms ease 0ms 1 forwards; animation: in-top 300ms ease 0ms 1 forwards; } .in-rightright .info { -webkit-transform-origin: 100% 0%; transform-origin: 100% 0%; -webkit-animation: in-rightright 300ms ease 0ms 1 forwards; animation: in-rightright 300ms ease 0ms 1 forwards; } .in-bottombottom .info { -webkit-transform-origin: 50% 100%; transform-origin: 50% 100%; -webkit-animation: in-bottombottom 300ms ease 0ms 1 forwards; animation: in-bottombottom 300ms ease 0ms 1 forwards; } .in-left .info { -webkit-transform-origin: 0% 0%; transform-origin: 0% 0%; -webkit-animation: in-left 300ms ease 0ms 1 forwards; animation: in-left 300ms ease 0ms 1 forwards; } .out-top .info { -webkit-transform-origin: 50% 0%; transform-origin: 50% 0%; -webkit-animation: out-top 300ms ease 0ms 1 forwards; animation: out-top 300ms ease 0ms 1 forwards; } .out-rightright .info { -webkit-transform-origin: 100% 50%; transform-origin: 100% 50%; -webkit-animation: out-rightright 300ms ease 0ms 1 forwards; animation: out-rightright 300ms ease 0ms 1 forwards; } .out-bottombottom .info { -webkit-transform-origin: 50% 100%; transform-origin: 50% 100%; -webkit-animation: out-bottombottom 300ms ease 0ms 1 forwards; animation: out-bottombottom 300ms ease 0ms 1 forwards; } .out-left .info { -webkit-transform-origin: 0% 0%; transform-origin: 0% 0%; -webkit-animation: out-left 300ms ease 0ms 1 forwards; animation: out-left 300ms ease 0ms 1 forwards; }
この特殊効果は、JavaScript を使用してグリッドに入るマウスの方向を取得し、対応するグリッド アニメーションに対応するクラスを追加します。 getDirection() 関数は方向関数です。
var getDirection = function (ev, obj) { var w = obj.offsetWidth, h = obj.offsetHeight, x = ev.pageX - obj.offsetLeft - w / 2 * (w > h ? h / w : 1), y = ev.pageY - obj.offsetTop - h / 2 * (h > w ? w / h : 1), d = Math.round(Math.atan2(y, x) / 1.57079633 + 5) % 4; return d; };
次に、すべての li 要素をトラバースし、マウスが入った方向に対応するクラスを追加します。
var nodes = document.querySelectorAll('li'), _nodes = [].slice.call(nodes, 0); var addClass = function (ev, obj, state) { var direction = getDirection(ev, obj), class_suffix = ''; obj.className = ''; switch (direction) { case 0: class_suffix = '-top'; break; case 1: class_suffix = '-right'; break; case 2: class_suffix = '-bottom'; break; case 3: class_suffix = '-left'; break; } obj.classList.add(state + class_suffix); }; _nodes.forEach(function (el) { el.addEventListener('mouseover', function (ev) { addClass(ev, this, 'in'); }, false); el.addEventListener('mouseout', function (ev) { addClass(ev, this, 'out'); }, false); });
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連おすすめ:
CSS3 を使用して超クールな黒猫保安官のホームページを実現しますCSS3 を使用して作成する方法シンプルな 3D 半透明立方体画像以上がCSS3 を使用して、マウスが画像上をスライドするときに方向を感知するクールな 3D アニメーションを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









純粋な CSS3 で波の効果を実現するにはどうすればよいですか?この記事ではSVGとCSSアニメーションを使って波のエフェクトを作成する方法をご紹介しますので、お役に立てれば幸いです。

この記事では、頻繁に登場する様々な奇妙な形のボタンをCSSを使って簡単に実現する方法を紹介しますので、ぜひ参考にしてください。

2 つの方法: 1. display 属性を使用して、要素に「display:none;」スタイルを追加するだけです。 2. Position 属性と top 属性を使用して、要素の絶対位置を設定し、要素を非表示にします。要素に「position:absolute;top:-9999px;」スタイルを追加するだけです。

CSS では、border-image 属性を使用してレースの境界線を実現できます。 border-image 属性では、画像を使用して境界線を作成できます。つまり、境界線に背景画像を追加できます。背景画像をレース スタイルとして指定するだけで済みます。構文「border-image: url (画像パス) は、内側への画像境界線の幅。開始を繰り返すかどうか;"。

テキストカルーセルと画像カルーセルを作成するにはどうすればよいですか?皆さんが最初に考えるのはjsを使うかどうかですが、実はテキストカルーセルや画像カルーセルも純粋なCSSでも実現できますので実装方法を見ていきましょう。

実装方法: 1. ":active" セレクターを使用して、画像上のマウス クリックの状態を選択します; 2. 変換属性とscale() 関数を使用して、画像の拡大効果を実現します。構文 "img:active {transform : スケール(x 軸倍率、y 軸倍率);}"。

CSS3 では、「animation-timing-function」属性を使用してアニメーションの回転速度を設定できます。この属性は、アニメーションがサイクルを完了する方法を指定し、アニメーションの速度曲線を設定するために使用されます。構文は「element {アニメーションタイミング関数: 速度属性値;}"。

css3 のアニメーション効果には変形があり、「animation: アニメーション属性 @keyframes ..{..{transform: 変換属性}}」を使用して変形アニメーション効果を実現できます。アニメーション属性はアニメーション スタイルを設定するために使用され、変形スタイルを設定するには、transform 属性を使用します。
