JSアルバム画像の揺れと拡大表示効果のサンプルコード

JSアルバム画像の揺れと拡大表示効果のサンプルコード

前回の記事では、JS を使って簡単な揺れ効果を実現する方法を紹介しました。ご興味があればクリックして読んでみてください。

今日は、JS アルバムの写真を揺らして拡大表示する効果を皆さんと共有します。効果画像は次のとおりです。

var xm;
var ym;
 
/* ==== onmousemove イベント ==== */
document.onmousemove = function(e){
	ウィンドウのイベントを生成
	xm = (ex || e.clientX);
	ym = (ey || e.clientY);
}
 
/* ==== ウィンドウのサイズ変更 ==== */
関数 resize() {
	if(diapo)diapo.resize();
}
onresize = サイズ変更;
 
/* ==== 不透明度 ==== */
setOpacity = function(o, alpha){
	if (o.filters) o.filters.alpha.opacity = alpha * 100; else o.style.opacity = alpha;
}
 
 
 
/* ===== スクリプトをカプセル化 ==== */
ディアポ = {
	O : [],
	DC: 0,
	画像: 0,
	テキスト: 0,
	N:0,
	xm : 0,
	ym:0,
	0,
	ny : 0,
	北西:0,
	0,
	rs:0,
	rsB: 0,
	ゾ:0,
	送信位置: 0,
	tx_var: 0,
	送信ターゲット: 0,
 
	/// スクリプトパラメータ 
	アトラクション:2、
	加速度: .9,
	減衰:.1、
	ズームオーバー: 2,
	ズームクリック: 6,
	透明度: .8、
	フォントサイズ: 18,
	//
 
	/* ==== ダイヤポのサイズ変更 ==== */
	サイズ変更: 関数(){
		(これ){
			nx = DC.offsetLeft;
			ny = DC.offsetTop;
			nw = DC.オフセット幅;
			nh = DC.オフセット高さ;
			txt.style.fontSize = Math.round(nh / font_size) + "px";
			Math.abs(rs-rsB)<100の場合、var i=0; i<N; i++) O[i].resize();
			rsB = rs;
		}
	},
 
	/* ==== ダイアポを作成 ==== */
	CDiapo: 関数(o){
		/* ==== 初期化変数 ==== */
		this.o = o;
		this.x_pos = this.y_pos = 0;
		this.x_origin = this.y_origin = 0;
		this.x_var = this.y_var = 0;
		this.x_target = this.y_target = 0;
		this.w_pos = this.h_pos = 0;
		this.w_origin = this.h_origin = 0;
		this.w_var = this.h_var = 0;
		this.w_target = this.h_target = 0;
		this.over = false;
		this.click = false;
 
		/* ==== 影を作成する ==== */
		this.spa = document.createElement("span");
		this.spa.className = "spaDC";
		diapo.DC.appendChild(this.spa);
 
		/* ==== サムネイル画像を作成 ==== */
		ドキュメントに要素を追加します。
		this.img.className = "imgDC";
		o.src をコピーします。
		this.img.O = これ;
		diapo.DC.appendChild(this.img);
		不透明度を設定します(this.img、diapo.transparency);
 
		/* ==== マウスイベント ==== */
		this.img.onselectstart = 新しい関数("return false;");
		this.img.ondrag = 新しい関数("return false;");
		this.img.onmouseover = 関数(){
			diapo.tx_target=0;
			diapo.txt.innerHTML=this.Ooalt;
			this.O.over = true;
			不透明度を設定します(this、this.O.click?diapo.transparency:1);
		}
		this.img.onmouseout = 関数(){
			diapo.tx_target=-diapo.nw;
			this.O.over = false;
			不透明度を設定します(this,diapo.transparency);
		}
		this.img.onclick = 関数() {
			if(!this.O.click){
				diapo.zo が this の場合、 diapo.zo.onclick() を実行します。
				this.O.click = true;
				this.O.x_origin = (diapo.nw - (this.O.w_origin * diapo.zoomClick)) / 2;
				this.O.y_origin = (diapo.nh - (this.O.h_origin * diapo.zoomClick)) / 2;
				diapo.zo = これ;
				不透明度を設定します(this,diapo.transparency);
			} それ以外 {
				this.O.click = false;
				this.O.over = false;
				this.O.resize();
				ディアポ.ゾ = 0;
			}
		}
 
		/* ==== "imgsrc" 画像の位置に基づいてサムネイルを並べ替える ==== */
		this.resize = 関数 (){
			(これ){
				x_origin = o.offsetLeft;
				y_origin = o.offsetTop;
				w_origin = o.offsetWidth;
				h_origin = o.offsetHeight;
			}
		}
 
		/* ==== アニメーション関数 ==== */
		this.position = 関数 (){
			(これ){
				/* ==== ターゲット位置を設定 ==== */
				w_target = w_origin;
				h_target = h_origin;
				if(以上){
					/* ==== マウスオーバー ==== */
					w_target = w_origin * diapo.zoomOver;
					h_target = h_origin * diapo.zoomOver;
					x_target = diapo.xm - w_pos / 2 - (diapo.xm - (x_origin + w_pos / 2)) / (diapo.attraction*(click?10:1));
					y_target = diapo.ym - h_pos / 2 - (diapo.ym - (y_origin + h_pos / 2)) / (diapo.attraction*(click?10:1));
				} それ以外 {
					/* ==== マウスアウト ==== */
					x_target = x_origin;
					y_target = y_origin;
				}
				if(クリック){
					/* ==== クリックされました ==== */
					w_target = w_origin * diapo.zoomClick;
					h_target = h_origin * diapo.zoomClick;
				}
 
				/* ==== 魔法のスプリング方程式 ==== */
				x_pos += x_var = x_var * diapo.acceleration + (x_target - x_pos) * diapo.dampening;
				y_pos += y_var = y_var * diapo.acceleration + (y_target - y_pos) * diapo.dampening;
				w_pos += w_var = w_var * (diapo.acceleration * .5) + (w_target - w_pos) * (diapo.dampening * .5);
				h_pos += h_var = h_var * (diapo.acceleration * .5) + (h_target - h_pos) * (diapo.dampening * .5);
				diapo.rs += (Math.abs(x_var) + Math.abs(y_var));
 
				/* ==== html アニメーション ==== */
				(img.style){で
					左 = Math.round(x_pos) + "px";
					上 = Math.round(y_pos) + "px";
					幅 = Math.round(Math.max(0, w_pos)) + "px";
					高さ = Math.round(Math.max(0, h_pos)) + "px";
					zIndex = Math.round(w_pos);
				}
				スパスタイル付き{
					左 = Math.round(x_pos + w_pos * .1) + "px";
					上 = Math.round(y_pos + h_pos * .1) + "px";
					幅 = Math.round(Math.max(0, w_pos * 1.1)) + "px";
					高さ = Math.round(Math.max(0, h_pos * 1.1)) + "px";
					zIndex = Math.round(w_pos);
				}
			}
		}
	},
 
	/* ==== メインループ ==== */
	実行: 関数(){
		diapo.xm = xm - diapo.nx;
		diapo.ym = ym - diapo.ny;
		/* ==== キャプションアニメーション ==== */
		diapo.tx_pos += diapo.tx_var = diapo.tx_var * .9 + (diapo.tx_target - diapo.tx_pos) * .02;
		diapo.txt.style.left = Math.round(diapo.tx_pos) + "px";
		/* ==== 画像アニメーション ==== */
		for(var i in diapo.O) diapo.O[i].position();
		/* ==== ループ ==== */
		タイムアウトを設定します("diapo.run();", 16);
	},
 
	/* ==== 画像を読み込む ==== */
	イメージロード: 関数(){
		// ===== すべての画像が読み込まれるまでループします =====
		var M = 0;
		for(var i=0; i<diapo.N; i++) {
			diapo.img[i].complete の場合
				diapo.img[i].style.position = "相対的";
				diapo.O[i].img.style.visibility = "表示可能";
				diapo.O[i].spa.style.visibility = "表示可能";
				M++;
			}
			サイズを変更します。
		}
		M<diapo.Nの場合、タイムアウトを設定します("diapo.images_load();", 128);
	},
 
	/* ==== 初期化スクリプト ==== */
	初期化:関数() {
		diapo.DC = document.getElementById("diapoContainer");
		diapo.img = diapo.DC.getElementsByTagName("img");
		diapo.txt = document.getElementById("キャプション");
		diapo.N = diapo.img.length;
		i=0; i<diapo.N; i++) diapo.O.push(新しいdiapo.CDiapo(diapo.img[i]));
		diapo.resize();
		diapo.tx_pos = -diapo.nw;
		diapo.tx_target = -diapo.nw;
		diapo.images_load();
		diapo.run();
	}
}
 
/* ==== 開始スクリプト ==== */
関数dom_onload() {
	document.getElementById("diapoContainer") の場合、diapo.init(); そうでない場合は、setTimeout("dom_onload();", 128);
}
dom_onload();

以上で、JSアルバム画像の揺れと拡大表示エフェクトのサンプルコードについての記事は終了です。より関連性の高いJS画像拡大と揺れコンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • マウスでトリガーされる画像の揺れ効果を実現する js メソッド
  • マウスを画像の上に置いたときの js シェイク効果
  • jsは画像をクリックすると画面の中央にポップアップして拡大する効果を実現します。
  • JavaScript を使用して画像を拡大・縮小したり、ドラッグ アンド ドロップする例
  • 画像拡大表示効果を実現するjs

<<:  オーディオマニアにアピールするオーディオビジュアルLinuxディストリビューション

>>:  コマンドを使用してMySQLデータベース(de1)を作成する方法

推薦する

MySQL アカウント情報をエレガントにバックアップする方法

序文:最近、インスタンスの移行の問題に遭遇しました。データの移行後、データベースのユーザーと権限も移...

VMware Workstation 15 Pro に Ubuntu 1804 をインストールするチュートリアル (画像とテキスト付き)

このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...

Javascript での JSBridge に関する予備的研究

目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...

Vue3 (V) HTTPライブラリaxiosの統合の詳細

目次1. axiosをインストールする2. アクシオスの使用1.ホームページでaxiosを参照する2...

DockerとDocker-Composeの使用例

Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテナ エンジンです...

Node.jsはexpress-fileuploadミドルウェアを使用してファイルをアップロードします

目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...

Reactでpropsを使用する方法と制限する方法

コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...

CSS3を使って歌詞進行テキストカラー塗りつぶし変更の動的効果を実装するアイデアの詳細な説明

音楽を再生すると、曲が進むにつれて歌詞が徐々に色づきます。色は単語ごとに変わるのではなく、左から右へ...

MySQL 5.6.22 のインストールと設定方法のグラフィックチュートリアル

このチュートリアルでは、MySQL5.6.22のインストールと設定方法の具体的なコードを参考までに共...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...

MySQL 分離レベルの詳細な説明と例

目次MySQL の 4 つの分離レベルデータ テーブルを作成します。分離レベルの設定物事の分離レベル...

TypeScript を使用して Vue3 で axios をカプセル化する詳細な例

この axios パッケージは、vue3 デモで使用されます。便宜上、element-plus は ...

Docker で Node.js をデプロイする方法

序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...

Linux での MySQL データベースのマスター スレーブ同期レプリケーション構成

Linux での MySQL データベースのマスター/スレーブ同期構成の利点は、この方法をバックアッ...

MySQL テーブルパーティションの使用法と基本原理の詳細な説明

目次パーティションテーブルとはパーティションテーブルの適用シナリオパーティションテーブルの制限パーテ...