に投稿 コメントを残す

JavaScript the ニセSleep

JavaScriptでsleepっぽい処理を試してみたところなかなかうまくいってウッシッシというところなのでここで自慢したい。
(※追記2012年1月18日:簡潔なコードとサンプルを新しく掲載しました)

参考サイト
JavaScriptでwait、sleep、pause – mayokara memo
http://mayokara.info/blog/archives/2008/01/15183102.php

イヌでもわかるJavaScript講座 ラーメンタイマー
http://www.red.oit-net.jp/tatsuya/java/noodles.htm

というか、参考サイトの内容を試してみただけともいう。

さて、詳細をここで帆船堂流に説明すると、閲覧者の方々を誤解と混乱の渦に叩き落とすことになるような気がしないでもないので、具体例はコードとサンプルで確認していただきたい。

Ajaxなどで余計なリクエストを送信しないという効果が期待できるはずである。ような気がする。

「今回使用したWidgetのコード」(*jQueryは呼び出し済み)

class testJSSleep extends WP_Widget
{
	function testJSSleep()
	{
		$widget_ops = array('classname' => 'testJSSleep', 'description' => __( "JSSLEEP_test") );
		$this->WP_Widget('testJSSleep', __('testJSSleep'), $widget_ops);
	}
	function widget($args, $instance)
	{
		$CP = get_post(get_the_ID());
		$attachments = get_children(get_the_ID());
		$imgs1 = null;
		$imgsL = null;
		if ($attachments) {
			$i = 0;
			foreach ($attachments as $val) {
				if (!($val->post_mime_type === 'image/jpeg')) {
					continue;
				}
				$imgurl = wp_get_attachment_thumb_url($val->ID);
				$imgtag = "<img src='{$imgurl}' width='40' height='40' alt='' class='testjssleepimg_{$i}' />";
				$imgs1 .= $imgtag;
				$imgurl = wp_get_attachment_url($val->ID);
				$imgtag = "<img src='{$imgurl}' alt='' class='testjssleepimg_{$i}' style='display:none;' />";
				$imgsL .= $imgtag;
				$i++;
			}
		}
		$imgs2 = "<div id='testjssleepbox2'><strong>擬似sleep処理あり</strong><br />{$imgs1}</div>";
		$imgs1 = "<div id='testjssleepbox1'><strong>sleep処理なし</strong><br />{$imgs1}</div>";
		$imgsL = "<div id='testjssleepboxL' style='text-align:center;width:400px;height:224px;overflow:hidden;background-color:#111;border:1px solid #4c4c4c;'>{$imgsL}</div>";
		echo "<strong>うそ寝 the 擬似sleepモード</strong>{$imgsL}<hr />{$imgs1}<hr />{$imgs2}";
		echo "
			<script type='text/javascript'>
			//![CDATA[
				jQuery(function($) {
					$('img', 'div#testjssleepbox1').mouseover(function(){
						var key = $(this).attr('class');
						$('img:visible', 'div#testjssleepboxL').attr('style', 'display:none;');
						$('img[class='+key+']', 'div#testjssleepboxL').attr('style', 'display:block;');
					});
					$('img', 'div#testjssleepbox2').mouseover(function(){
						var tmp = this;
						var chotto_mate = function(e) {
							var key = $(e).attr('class');
							$('img:visible', 'div#testjssleepboxL').attr('style', 'display:none;');
							$('img[class='+key+']', 'div#testjssleepboxL').attr('style', 'display:block;');
						};
						mattoru_wai = setTimeout(function() {
							chotto_mate(tmp);
						}, 200);
					});
					$('img', 'div#testjssleepbox2').mouseout(function() {
						clearTimeout(mattoru_wai);
					});
				});
			//]]>
			</script>
		";
	}
}
register_widget('testJSSleep');