POPSブログ

簡易TRANSITION-PHOTO/2

47

  Category:  jquery2012/03/07 pops 

簡易TRANSITION-PHOTO-2、画像に拡大縮小フエードのエフェクトをくわえます。


簡易TRANSITION-PHOTO-2 (拡大縮小フエード)

pops-transitionphoto02.js

トランジッション、サンプル表示



HTML構造を直接書きますが、残り画像はJS側スクリプトに記述します。

  • 簡易記述方式のJSです。読み込めば直ぐ実行します。
  • サイクルタイムは、JSで2種設定できます。書き換えてください。
    (スタートまでの時間、サイクル、スライドの時間など、画像の大きさ状況にあわせる)
  • JSで必要な設定をして上書き保存する。
  • 画像は個人で、5-10枚用意ください。
  • 画像名、画像までのパスはJSに記載します、随時ロード形式です。
    (その都度、画像をロードしますので、画像転送量を少し抑えることができます)
  • 画像の大きさで、CSSをも変更ください。
  • TOPページ用途です。複数の設置は原則できません。
  • IE8 はキレイに動作しません。Google Chrome を利用ください。

簡単な動作の説明

説明図


図のように、予め拡大率を決めておき、拡大して移動点に移動、元の大きさに戻す。原点に移動しているだけです。 IN OUT は反対の関係です。勿論拡大率もランダムに設定することも可能です。
マスクされているために、周囲は表示されません。移動先のポイントを変えることにより少し雰囲気がかわります。
現在9つのポイント(0-8)を決めて、固定していますが、これも変更は可能でしょう。それ以上の場合は拡大しない、つまり普通のクロスフェードになります。
つまりこれも、「トランジッションのまがい物」です。


簡単なスクリプト説明


途中略す

		//puff動作用の配列データのセット
		var puff_set = function () {
//puff
puff_type_x = [1,0.5,0,1,0.5,0,1,0.5,0,0];
puff_type_y = [1,1,1,0.5,0.5,0.5,0,0,0,0];

説明TEXTを表示したときの名前です

puff_name =['Puff-TL-IN',................'crossfade'];
puff_name2 =['Puff-TL-OUT',..............'crossfade'];

		}

途中略す

-----------------------------------------------------------------

ランダムにポイントを取得、8以上は crossfade

no = Math.floor(Math.random() * 10);//10
if (no > 8) {no = 9;fade_type = "crossfade";in_type = "in";}
var mvName = puff_name[no];
if (in_type == 'out') {mvName = puff_name2[no];}

テキスト用

set_text(" [ " + in_type + " ] PUFF " + no + " / " + mvName + " /[FADE] " + fade_set);

var s_p_y = 0,s_p_x = 0,s_W = bs_W,s_H = bs_H,e_p_y = 0,e_p_x = 0,e_W = bs_W,e_H = bs_H;

大きくした場合のアニメ時間をのばす

//FadeTime
var fade_time = Math.floor(speed * 1.25);

拡大の比率を大体きめてある、変更可能です

//rate
var scale_rate = 1.35;

位置データは比率になっているので、計算でもとめる。

//puff
if (fade_type == 'puff') {
	var scaleW = Math.round(bs_W * (scale_rate - 1));
	var scaleH = Math.round(bs_H * (scale_rate - 1));
	s_p_y = Math.floor(scaleH * puff_type_y[no]) * -1;
	s_p_x = Math.floor(scaleW * puff_type_x[no]) * -1;

	概略の計算ですから、小さいと見た目が悪いので修正

	s_W = Math.ceil(bs_W * scale_rate) + 2;
	s_H = Math.ceil(bs_H * scale_rate) + 2;
	e_p_y = 0;
	e_p_x = 0;
	e_W = bs_W;
	e_H = bs_H;
}

crossfade の場合はアニメ時間は設定値を使用

if (fade_type != 'puff') {
	fade_time = speed;
}

途中略す

-----------------------------------------------------

HTML側に下画像URLを記載しないで使用する場合の変更
(マシン環境が悪くFirefox使用の場合有効、下画像切り替えで、最初にHTMLに記載した画像が一瞬見える場合がある)

<div id="t_imgholder"><img /></div>

JS側の変更

//init
var init = function () {
	途中略す

下の設定を有効にしてください、下画像にURLをおくります

	//下画像にURLをセット表示/未使用
	//imgholder_elm.children("img").empty().attr({'src':img_url});

	途中略す
}

但し最初の画像表示が遅くなります


設置方法

簡易JS記述、間違いの少ない、setTimeout の通常方式で記述しています。なお、設置するページが違えば、別画像ででも使用できま すが、画像の大きさが違えば別のCSS名で新たに作ってリンクしてください。


[ HTML構造を作る ]
以下のように構造を作ってください。ID は #pops_transition_photo です。


<div id="pops_transition_photo">
	<div id="transit_box">
		<div id="t_imgholder"><img src="/main/images/photo_tm1.jpg" /></div>
		<div id="top_base"><img /></div>
		<div id="t_loading"></div>
		<div id="view_text"></div>
	</div>
</div>

注意、原則、最初の画像を #t_imgholder に書き込んでください。また全画像はJSに登録します。画像伸縮のため幅高さを100%で使用しますので、大きさは記入しないでください。


[ 使用方法 ]、JSを読み込むだけで実行します。またHEAD部分に直接記述しても実行します。
注意、jquery1.42以降のバージョンで作動します。


読み出す場合
<link rel="stylesheet" type="text/css" href="/main/css/pops-transitionphoto02.css" />
<script type="text/javascript" src="/main/js/jquery.js"></script>
<script type="text/javascript" src="/main/js/pops-transitionphoto02.js"></script>

----------------------------------------------------------------

HEAD部分に直接JSを記述する場合
<script type="text/javascript">
	ここにJS部分を直接記述
</script>

JS、CSS、Loading画像

JS pops-transitionphoto02.js 通常方式

ActinScriptのTransitionとは意味がちがいます。中には使用していない変数もあります。


//pops-transitionphoto02.js
//setTimeout loading 通常方式
//POPS WEB KOUBOU

(function($){

	$(function(){

		var bs_W = 640;
		var bs_H = 200;

		var first_time = 12000;//スタートまでの時間、5000以上 
		var cycle_time = 8000;//サイクル 5000以上
		var speed = 1000;//拡大縮小時間 600-1000位画像の大きさによる

		//TEXT表示
		var text_use="";//use

		//画像までのパス
		var path='/main/images/';
		//画像名を登録する
		var img_urls=['photo_tm1.jpg','photo_tm2.jpg','photo_tm3.jpg','photo_tm4.jpg','photo_tm5.jpg'];
		var list_len=img_urls.length;

		//jQueryObjectCache
		var imgholder_elm,trans_base_elm,mid_elm,top_elm;
		var img_url,keep_url,loading;
		var imgPreloader;//opela

		//chash
		trans_base_elm = $('#transit_box');
		imgholder_elm = $('#transit_box #t_imgholder');
		top_elm = $('#transit_box #top_base');
		loading = $('#transit_box #t_loading');

		var view_type = 'puff';
		var random_nm = ['puff'];//未使用

		//position
		//puff
		var puff_type_x = [],puff_type_y = [],puff_name = [];

		var count = 0;
		var no = 0;
		var move_type_name = ['in','out','in','out'];
		var in_type = "in";
		var fade_set = "";
		var anime_move = "";

		//opacity使用の判定
		var support_op=true;
		if (!jQuery.support.opacity) {support_op=false;}

		//------------------------------------------------

		//init
		var init = function () {

			//loading-Set
			loading.css({'width':bs_W,'height':bs_H,'display':'none'});
			//Box右移動、非表示
			top_elm.children("img").css({'width':'100%','height':'100%'});
			top_elm.css({'left':bs_W,'top':0,'display':'none'});

			//位置情報取得
			puff_set();

			//最初の画像をINNER画像BOX1にセット表示する
			img_url=path+img_urls[count];
			keep_url=path+img_urls[count];

			//下画像にURLをセット表示/未使用
			//imgholder_elm.children("img").empty().attr({'src':img_url});

			//次ぎの画像の番号セット
			count = 1;

			//START Main-timer-set
			window.setTimeout(nextImage,first_time);

		}

		//puff動作用の配列データのセット/比率
		var puff_set = function () {
//puff
puff_type_x = [1,0.5,0,1,0.5,0,1,0.5,0,0];
puff_type_y = [1,1,1,0.5,0.5,0.5,0,0,0,0];
puff_name =['Puff-TL-IN','Puff-T-IN','Puff-TR-IN','Puff-L-IN','Puff-C-IN','Puff-R-IN','Puff-BL-IN','Puff-B-IN','Puff-BR-IN','crossfade'];
puff_name2 =['Puff-TL-OUT','Puff-T-OUT','Puff-TR-OUT','Puff-L-OUT','Puff-C-OUT','Puff-R-OUT','Puff-BL-OUT','Puff-B-OUT','Puff-BR-OUT','crossfade'];

		}

		//表示の種類により振り分け/現在1個だけ
		var set_view_images = function () {

			//timer-off
			view_type = 'puff';
			puff_image();
		}

		//Puffフエード処理表示
		var puff_image = function () {

		//opacity
		var start_opacity = 0;
		var end_opacity = 1;

			var fade_type = "puff";
			top_elm.css({'top':0,'left':bs_W,'width':bs_W,'height':bs_H});
			in_type = move_type_name[Math.floor(Math.random() * move_type_name.length)];

			fade_set = "fade";
			no = Math.floor(Math.random() * 10);//10
			if (no > 8) {no = 9;fade_type = "crossfade";in_type = "in";}
			var mvName = puff_name[no];
			if (in_type == 'out') {mvName = puff_name2[no];}
			set_text(" [ " + in_type + " ] PUFF " + no + " / " + mvName + " /[FADE] " + fade_set);

			var s_p_y = 0,s_p_x = 0,s_W = bs_W,s_H = bs_H,e_p_y = 0,e_p_x = 0,e_W = bs_W,e_H = bs_H;
			//FadeTime
			var fade_time = Math.floor(speed * 1.25);
			//rate
			var scale_rate = 1.35;
			//puff
			if (fade_type == 'puff') {
				var scaleW = Math.round(bs_W * (scale_rate - 1));
				var scaleH = Math.round(bs_H * (scale_rate - 1));
				s_p_y = Math.floor(scaleH * puff_type_y[no]) * -1;
				s_p_x = Math.floor(scaleW * puff_type_x[no]) * -1;
				s_W = Math.ceil(bs_W * scale_rate) + 2;
				s_H = Math.ceil(bs_H * scale_rate) + 2;
				e_p_y = 0;
				e_p_x = 0;
				e_W = bs_W;
				e_H = bs_H;
			}
			if (fade_type != 'puff') {
				fade_time = speed;
			}

			//IN
			if (in_type == 'in') {
				//opacity
				start_opacity = 0;
				end_opacity = 1;
				//TOPelm
				top_elm.css({'top':s_p_y,'left':s_p_x,'width':s_W,'height':s_H});
				top_elm.children("img").empty().attr({src:img_url});
				top_elm.css({'display':'block'});
				//アニメ
				top_elm.css({'opacity':start_opacity}).animate({'top':e_p_y,'left':e_p_x,'width':bs_W,'height':bs_H,'opacity':end_opacity},fade_time,function() {
					imgholder_elm.children("img").empty().attr({'src':img_url});
					top_elm.css({'top':0,'left':bs_W,'display':'none'});
					trans_image_parts();
				});
			}
			//OUT
			if (in_type == 'out') {
				//opacity
				start_opacity = 1;
				end_opacity = 0;//0.01
				//TOPelm
				top_elm.css({'top':e_p_y,'left':e_p_x,'width':bs_W,'height':bs_H});
				top_elm.children("img").empty().attr({src:keep_url});
				top_elm.css({'display':'block'});
				//
				imgholder_elm.children("img").empty().attr({'src':img_url});
				//アニメ
				top_elm.css({'opacity':start_opacity}).animate({'top':s_p_y,'left':s_p_x,'width':s_W,'height':s_H,'opacity':end_opacity},fade_time,function() {
					top_elm.css({'top':0,'left':bs_W,'display':'none'});
					trans_image_parts();
				});
			}
		}

		//end-anime 終了処理
		function trans_image_parts() {

			anime_move = '';
			//fadeの場合opacity戻す
			if (fade_set=='fade') {
				top_elm.css({'opacity':1});
				//support.opacity判定/filterの除去
				if (!support_op) {top_elm.css({'filter':'none'});}
			}

			//Firefox対策/画像BOXの大きさを戻す
			top_elm.css({'width':bs_W,'height':bs_H});

			//keep-url
			keep_url=img_url;
			//cycle-time
			setTimeout(nextImage,cycle_time);

		};

		//NEXT
		function nextImage() {
			//カウントアップ
			count++;
			if (count > list_len-1) {count = 0;}
			//imgタグに入れる、URL取得
			img_url = path+img_urls[count];
			imgload ();
		}

		//imgPreloader
		var imgload = function() {
			//loading
			loading.css({'display':'block'});
			//set-imgPreloader
			imgPreloader = new Image();
			//onload
			imgPreloader.onload = function() {
				//loading
				loading.css({'display':'none'});
				//TRANSITION振り分に進む
				set_view_images ();
			}
			//url
			imgPreloader.src = img_url;
		}

		//set-text
		function set_text(text) {
			if (text_use == 'use') {
				$('#view_text').text(text);
			}
		}

		//init start
		init();

	});

})(jQuery);

Loading画像 31x31



CSS pops-transitionphoto02.css


/* pops-transitionphoto02.css 日本語*/

#pops_transition_photo {
	display:block;
	position:relative;
	width:640px;
	height:200px;
	background-color:#000000;
}
#pops_transition_photo #transit_box {
	display:block;
	position:absolute;
	top:0;left:0;
	width:640px;
	height:200px;
	background-color:#000000;
	overflow:hidden;
}

#transit_box #t_imgholder {
	display:block;
	position:absolute;
	top:0;left:0;
	width:640px;
	height:200px;
	padding:0;
	margin:0;
	border-style:none;
	background-color:#000000;
}
#transit_box #t_imgholder img {
	padding:0;
	margin:0;
	border-style:none;
	text-decoration:none;
}

#transit_box #top_base {
	display:block;
	position:absolute;
	top:0;left:0;
	overflow:hidden;
}
#transit_box #top_base img {
	width:100%;
	height:100%;
	border-style:none;
}

#transit_box #t_loading {
	display: block;
	position:absolute;
	top:0;left:0;
	border:0;
	background: url("/main/images/loading.gif") no-repeat center center;
	background-color: none;/*Safari*/
}
#transit_box #view_text {
	display:block;
	position:absolute;
	top:5px;left:5px;
	width:80%;
	height:20px;
	color:#FF0000;
}

以上です。



[ この記事のURL ]


タグ:jquery , Transition , photo , series

[ 簡易TRANSITION-PHOTO シリーズ記事 ]

簡易TRANSITION-PHOTO/42012.03.09
簡易TRANSITION-PHOTO/32012.03.08
簡易TRANSITION-PHOTO/22012.03.07
簡易TRANSITION-PHOTO/12012.03.06

 

ブログ記事一覧

年別アーカイブ一覧



[1]