今日は、クールなマウス ホバー エフェクトを一緒に学びます。これには主に CSS3 の 3D 効果の使用と、実装プロセスで使用するいくつかの単純な変換アルゴリズムが含まれます。理論を図の形で理解しやすくするために最善を尽くします。さっそく、最後のエフェクトであるホバーエフェクト (http://www.seejs.com/demos/examples/3dcss3/) を見てみましょう。接続を開き、マウスで画像リスト領域に入り、マウスを移動して、対応する領域のコンテンツフローティングレイヤーの変化を観察します。 注: 高度なブラウザプレビューを使用してください (Chrome ブラウザを推奨します)。
準備
まず、3 次元の効果を理解するとき、空間想像力を使って 2 次元の画面上で 3 次元の奥行きを確認する必要があります。 . (ソリッド ジオメトリの Z 軸)。さらに、遠く、小さい、近い、大きいなどの視点・観察点(遠近法)などの基礎的な理論知識も理解する必要があります。もちろん、変換プロセスの一部のデータに基づいて、効果実現のプロセスで必要なデータを計算するためにいくつかの単純な数学的変換機能を習得する必要もあります。長い文をもう 1 つ: 空間的想像力は非常に重要です、それで十分です!
効果分析
3 次元空間を構築するために、今考えてみましょう。この記事を読んでいるあなたは、目は画面から一定の距離にあります。この距離は、例では視点点(マウス位置)からコンテンツフローティングレイヤーまでの距離に相当しますが、コンテンツ領域と背景との視差を出すために、視点の終点となります。が背景に設定されており、背景とコンテンツレイヤーの間の距離は ですが、それらの間にはまだ一定の距離があります。この3人の関係を想像できますか?視点 - コンテンツ オーバーレイ - 背景には、目から画面までの距離と同じように、垂直方向の奥行きがあります。頭を動かして画面の片側に目を近づけると、もう一方の端の文字が非常に小さく(遠端では小さく、近くでは大きく)表示され、読みにくいことがわかります。したがって、この時点では、画面を回転して画面を目の向きにします。これは、例でマウスを領域の片側に移動するようなもので、コンテンツのフローティングレイヤーが小さな角度で回転し、その方向を向きますマウスの位置 (この例には X 方向と Y 方向の両方が含まれることに注意してください)。
次に、このモデルを中央で切り取り、Y 軸に沿って 90 度回転させます。いくつかの異なる状況を段階的に見てみましょう:
シナリオ 1、コンテンツ レイヤーなし、目 直接アクセス。背景へ:
ケース 2、コンテンツ層がありますが、コンテンツ層は観測点によって変化しません:
ケース3. コンテンツ レイヤーがあり、コンテンツ レイヤーは観測点に応じて角度的にオフセットされます。
この時点では、基本的にこの例の静的モデルのみが表示されます。違いは、この場合、コンテンツ レイヤーです。ツイスト角度は必ずしも観測点に対して垂直であるとは限りませんが、これは単なるパラメーターの違いです。完全な gif アニメーションを使用して、観測に応じてコンテンツ レイヤーが変化するプロセス全体を見てみましょう。ポイント:
このモデルを使用すると、サンプルの実装がはるかに簡単になります。
コーディング
最初のステップは、背景レイヤーとコンテンツ レイヤーをレイアウトすることです (例として 1 つのコンテナーを取り上げます)
次に、これらを次の方法で追加します。 CSS スタイル それを積み重ねて、観測点と背景の間の距離を設定します。
.wrap {
position:relative;
float:left;
margin-top: 20px;
margin-left: 20px;
幅: 400px;
高さ: 600px;
/ ※背景からの観測点の距離 距離は400ピクセル、つまり目からイラストの黒い縦線までの距離
/
perspective: 400px;
デフォルトの目の観測点ラップの中心にあります/
perspective-origin: 50% 50%;
overflow: hidden;
}
。ラップ .up {
位置: 絶対;
上: 0;
左: 0;
幅: 100%;
height: 100%;
* コンテンツ レイヤーは背景レイヤーから 80 ピクセル離れています。コンテンツ レイヤーが目に近いと、大きく見えます
*コンテンツが完全に表示されるように表示率を 0.8 に設定します
*/
transform:scale(.8) translationZ(80px);
}
2 番目のステップは、マウスの移動中に必要なデータの計算式を分析することです:
まず図を見てみましょう:
その図非常に明確ですが、まだまだ不明な点が多いようです。 JS では、ブラウザの表示領域の左上隅を基準としたノード (コンテナ) の相対座標を簡単に取得できることがわかっているため、[x1, y1] は実際には既知です。コンテナの中心位置は、コンテナの x 座標と y 座標にコンテナ自体の幅と高さの半分を加えたものになります。つまり、[x0, y0] も既知です。最後に、マウスの移動中に、イベント オブジェクト自体を通じてブラウザの左上隅を基準としたマウスの座標を簡単に取得できます。もちろん、[x2, y2] も取得できます。また、未知の [rx,実際のアプリケーションでは、より合理的な値が設定されているため、既知のデータを式に代入して、最終的に dx1、dy1、rx0、ry0 を簡単に計算できます。
3 番目のステップは、理論と実践、実践を組み合わせて真実をテストすることです:
(function(){
var c = [], // center: centerマウス移動エリアのポイント Co座標
m = [], // MouseCooperatives: 現在のマウス位置の座標
w = [], // WrapCooperatives: マウスの左上隅の座標マウス移動領域
d = [ 3, 3] // X/Y 方向の最大ツイスト角度 (度)
document.getElementById('J_Wrap').onmousemove = function( ev){
ev.preventDefault( );
var _this = this, r, z;
m[0] = ev.clientX + window.scrollX;
m 1= ev.clientY + window .scrollY;
w[0] = _this.getBoundingClientRect().left + window.scrollX;
w 1= _this. getBoundingClientRect().top + window.scrollY;
c[0] = w[0] + _this.offsetWidth / 2;
c 1= w 1+ _this.offsetHeight / 2;
// 回転: 現在のマウスに従って 現在の X/Y 方向の回転角度 (度) を領域の中心を基準とした位置のパーセンテージとして計算します
r = [-(c[0] – m[0]) / (c[0] – w[0]) * d[0], (c 1 – m 1) / (c 1 – w 1) * d 1] ;
//perspectiveOrigin: 視覚的な観察点はマウス移動領域の左上隅を基準としています Percent(0-1)
p = [0.5 + (c[0] – m[0]) / (c[0] – w[0]) * 0.5, 0.5 + (c 1 – m 1) / (c 1 – w 1) * 0.5];
z = 80 ;
_this.style['perspectiveOrigin'] = p[0] * 100 + '%' + ' ' + p 1* 100 + '%';
_this.getElementsByTagName(' div') 1.style['transform'] = 'scale(.8) 変換Z(' + Math.abs(z ) + 'px) 回転X(' + r 1+ 'deg) 回転Y(' + r[0] + 'deg)';
};
})();
配列 r と配列 p の計算過程を図の式と比較します。上の凡例の位置にある d 配列は [3, 3] と指定されています。もちろん、お好みに応じて数値を指定することもできます。基本的にエフェクト全体は完成しています。
組織とカプセル化
前のコードは関数を実装していますが、コードの記述は非常に不規則です。任意の変数名、コードの再利用性の考慮、および複数のインスタンスの考慮がありません。マウスを外した後、表示効果が復元されないなど。したがって、本番環境で使用することは基本的に不可能です。
(function(window, $){
var _default = {
ターゲット: '.up',
度: [3, 3],
translateZ: 80,
スケール: .8
};
$.fn.magicHover = function(cfg) { var config = $.extend({}, _default, cfg), center = [], // center: 鼠标move区域中心点坐标 mouseCoord = [], // mouseCoordinates: 鼠标当前位置坐标 wrapCoord = [], // wrapCoordinates: 鼠标move区域左上角坐标 deg = config.deg; // X/Y方向的最大扭转角度(deg) return this.each(function(idx, wrap){ $(wrap).on('mousemove', function(ev){ ev.preventDefault(); var _this = $(this), rotate; mouseCoord[0] = ev.clientX + $(window).scrollLeft(); mouseCoord[1] = ev.clientY + $(window).scrollTop(); wrapCoord[0] = _this.offset().left; wrapCoord[1] = _this.offset().top; center[0] = wrapCoord[0] + _this.width() / 2; center[1] = wrapCoord[1] + _this.height() / 2; // rotate: 根据当前鼠标位置相对于区域中心位置百分比计算出当前X/Y方向的扭转角度(deg) rotate = [-(center[0] - mouseCoord[0]) / (center[0] - wrapCoord[0]) * deg[0], (center[1] - mouseCoord[1]) / (center[1] - wrapCoord[1]) * deg[1]]; // perspectiveOrigin: 视觉观察点相对于鼠标move区域左上角的百分比(0-1) perspectiveOrigin = [0.5 + (center[0] - mouseCoord[0]) / (center[0] - wrapCoord[0]) * 0.5, 0.5 + (center[1] - mouseCoord[1]) / (center[1] - wrapCoord[1]) * 0.5]; _this.css('perspectiveOrigin', perspectiveOrigin[0] * 100 + '%' + ' ' + perspectiveOrigin[1] * 100 + '%'); _this.find(config.target).css('transform', 'scale(' + config.scale + ') translateZ(' + Math.abs(config.translateZ) + 'px) rotateX(' + rotate[1] + 'deg) rotateY(' + rotate[0] + 'deg)'); }).on('mouseout', function(ev){ var _this = $(this); _this.css('perspectiveOrigin', '50% 50%'); _this.find(config.target).css('transform', 'scale(' + config.scale + ') translateZ(' + Math.abs(config.translateZ) + 'px) rotateX(0) rotateY(0)'); }); });};
})(window, jQuery);
そして最後の呼び出しメソッドも非常に単純です:
$ (function(){
$('.wrap').magicHover({
ターゲット: '.up',
度: [3, 3],
translationZ: 80
});
});
最後に、紛らわしい点の 1 つは、CSS3 の回転 (rotateX、rotateY) です。たとえば、rotate) 、rotateZ) は座標軸を基準にしています。たとえば、rotateX を使用すると、rotate で x と y の位置を意図的に入れ替えて、実際に回転させます。 deg パラメータと translationZ パラメータを変更してブラウジング効果を比較し、原理をより簡単に理解してみることができます。さて、完了しました。今夜はゆっくりお休みください~~
著者: Baima Villa ウェブサイト: http://www.seejs.com/archives/766
記事の出典: Front-百科事典終了 このサイトの記事はすべて、HTML5 DreamWorks の編集者が選択した他のメディアからの転載です。これらはネチズンのみが学習および伝達するためのものです。私たちの作品があなたの権利を侵害している場合は、編集者 QQ: 123464386 までご連絡ください。間に合うように、できるだけ早く処理させていただきます。

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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