<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>chimanaco blog &#187; JavaScript</title>
	<atom:link href="http://blog.chimanaco.net/archives/category/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.chimanaco.net</link>
	<description>Flash, ActionScript, JavaScript, something like that</description>
	<lastBuildDate>Sat, 21 Jan 2012 05:05:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>jQuery イメージスライダーNivo Slider で画像ごとに停止時間を変える</title>
		<link>http://blog.chimanaco.net/archives/20111227163815.php</link>
		<comments>http://blog.chimanaco.net/archives/20111227163815.php#comments</comments>
		<pubDate>Wed, 28 Dec 2011 00:38:15 +0000</pubDate>
		<dc:creator>chimanaco</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Nivo Slider]]></category>

		<guid isPermaLink="false">http://blog.chimanaco.net/?p=1340</guid>
		<description><![CDATA[
Nivo Slider は 多彩なトランジションを繰り出すスライドショーを簡単に作ることができる高性能 jQuery イメージスライダー。jQuery プラグイン版は無料で使うことができます。
使用方法は下記を参考にし [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.chimanaco.net/wp-content/uploads/2011/12/blog-nivo.jpg" alt="" title="blog-nivo" width="600" height="326" class="alignnone size-full wp-image-1351" /></p>
<p><a href="http://nivo.dev7studios.com/">Nivo Slider</a> は 多彩なトランジションを繰り出すスライドショーを簡単に作ることができる高性能 jQuery イメージスライダー。jQuery プラグイン版は無料で使うことができます。</p>
<p>使用方法は下記を参考にしてもらえば好いと想います。<br />
<a href="http://webhako.net/jquery/item/plugin-nivo_slider/">Nivo Sliderの使い方とサンプル | jQueryプラグイン集</a></p>
<p>トランジションのタイプは、img タグの data-transition 属性でトランジション名を指定することで画像ごとに簡単に変更できるのですが、例えば文字を読ませたい場合に少し長めに止めておきたい、といったように画像毎に停止時間を指定できる機能はデフォルトでは現在(2012/12/27)のところないようです。探してみたところ以下のページでやり方が紹介されていました。<br />
<a href="http://support.dev7studios.com/discussions/nivo-slider/316-custom-timing ">Can I get different pauseTime&#8217;s for different slides? / Nivo Slider jQuery Plugin / Discussion Area &#8211; Nivo Slider Support </a></p>
<p>以下のコードを nivoRun function の中のカスタムトランジションに関するコードの後に入れます。圧縮前の jquery.nivo.slider.js (v2.7.1) で言うと 614 行目あたりかな。</p>
<pre>
if(vars.currentImage.attr('data-timing')){
    settings.pauseTime = vars.currentImage.attr('data-timing');
    window.clearInterval(timer);
    timer = '';
    if(timer == '' &#038;&#038; !settings.manualAdvance){
    timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
    }
}
</pre>
<p>default の pauseTime が 3000 として、以下のように記述すると、3、4枚目の画像で pauseTime が1500と半分になり、5枚目の画像ではまた3000に戻ります。data-timing 属性を持っている時のみ上記のコードは適用されるので、何も指定しない場合は最後に指定した pauseTime が適用されます。</p>
<pre>
&lt;img src=&quot;001.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;002.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;003.jpg&quot; alt=&quot;&quot; data-timing=&quot;1500&quot; /&gt;
&lt;img src=&quot;004.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;005.jpg&quot; alt=&quot;&quot; data-timing=&quot;3000&quot; /&gt;
</pre>
<p>今回は pauseTime を弄っていますが、お望みとあらば同様の方法で slices でも boxCols でも画像毎に指定できるようにカスタムできます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimanaco.net/archives/20111227163815.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWFObject+ExternalInterfaceでのGoogle Analytics設定</title>
		<link>http://blog.chimanaco.net/archives/20081122192257.php</link>
		<comments>http://blog.chimanaco.net/archives/20081122192257.php#comments</comments>
		<pubDate>Sat, 22 Nov 2008 10:22:57 +0000</pubDate>
		<dc:creator>chimanaco</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[swfobject]]></category>

		<guid isPermaLink="false">http://www.chimanaco.net/wordpress/?p=17</guid>
		<description><![CDATA[FlashとJavaSrciptの連携をするにはExternalInterfaceを使うと便利です。過去記事で面倒なやり方をエントリーしましたが今後はこちらのやり方で行こうと想います。
先日「Google Analyti [...]]]></description>
			<content:encoded><![CDATA[<p>FlashとJavaSrciptの連携をするにはExternalInterfaceを使うと便利です。<a href="http://www.chimanaco.net/blog/archives/20080903170226.php">過去記事</a>で面倒なやり方をエントリーしましたが今後はこちらのやり方で行こうと想います。</p>
<p>先日<a href="http://internet.watch.impress.co.jp/cda/news/2008/11/18/21565.html">「Google Analytics」がFlashコンテンツのアクセス解析に対応</a>しましたが、こちらのやり方は後でやってみるとして、とりあえずExternalInterfaceを使ってJavaSrciptと連携しGoogle Analyticsを使えるようにしてみます。</p>
<p>こんな感じです。</p>
<p><script type="text/javascript" src="/blog/common/js/swfobject.js">	</script><br />
<!--Start-swf--></p>
<div id="externalFlash"></div>
<p><script type="text/javascript">
// <![CDATA[
var so = new SWFObject('/blog/sample/004/testGA.swf', 'external2', '350', '200', '9', '#ffffff');
so.addParam('wmode', 'opaque');
so.addParam('allowScriptAccess', 'always');
so.write('externalFlash');
// ]]&gt;
</script><br />
<!--End-swf--></p>
<p><span id="more-17"></span></p>
<h4>参考にさせて頂いたページ</h4>
<ul class="linkOut">
<li><a href="http://ryow.net/blog/2008/06/18-211129.php">ryow.net Blog &#8211; FlashからGoogle Analyticsを使う（AS2、AS3両方対応）</a></li>
<li><a href="http://ryow.net/blog/2007/09/07-232843.php">ryow.net Blog &#8211; SWFObjectを使ったExternalInterfaceまとめ</a></li>
<li><a href="http://www.google.com/support/googleanalytics/bin/answer.py?hl=jp&#038;answer=55520">Flash イベントをトラッキングするにはどうすればよいですか。 &#8211; Google Analytics ヘルプ センター</a></li>
</ul>
<p>以下、上記のサイト様のマネマネです。<br />
まず、ExternalInterfaceを使ってJavaSrciptと連携します。htmlの設定はこんな感じ。</p>
<pre>
&lt;div id=&quot;externalFlash&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	// &lt;![CDATA[
	var so = new SWFObject(&#039;testGA.swf&#039;, &#039;external2&#039;, &#039;350&#039;, &#039;200&#039;, &#039;9&#039;, &#039;#ffffff&#039;);
		so.addParam(&#039;wmode&#039;, &#039;opaque&#039;);
		so.addParam(&#039;allowScriptAccess&#039;, &#039;always&#039;);
        so.write(&#039;externalFlash&#039;);
	// ]]&gt;
&lt;/script&gt;
&lt;/div&gt;
</pre>
<p>1.SWFObjectを使ってFlashを表示させる部分をexternal**というdivで囲みます。<br />
2.SWFObjectの第2引数をexternal**とします。<br />
3.allowScriptAccessをalwaysに設定。</p>
<p>external**というidにするのがポイントのようです。Flashの設定は以下のようになります。(img1をクリックするとimg1用のページIDを送信)</p>
<pre>
import flash.external.ExternalInterface;
import flash.events.MouseEvent;
img1.addEventListener(MouseEvent.CLICK,clickTest)

function clickTest(event:MouseEvent)：void {
      ExternalInterface.call("pageTracker._trackPageview", "/flash/img1/");
    }
</pre>
<p>まず最初にexternalクラスのExternalInterfaceをimportして、callメソッドでJavaScript関数を呼び出します。call(&#8220;pageTracker._trackPageview&#8221;,&#8221;ページID&#8221;);という形式です。</p>
<p>さらにより使いやすくするためにpageTracker._trackPageviewを呼び出すためのクラスを作ります（ExGA.as）</p>
<pre>
package{
  import flash.external.*
  public class ExGA{

    public static function tracker(pageID):void{
      ExternalInterface.call("pageTracker._trackPageview",pageID)
    }
  }
}
</pre>
<p>このクラスを使ってできたサンプルがこんな感じです。（ドキュメントクラスMain.as）</p>
<pre>
package {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;

	//Google Analytics
	import ExGA;

	public class Main extends MovieClip
	{

		//コンストラクタ
		public function Main():void {
			init();
		}

		public function init():void
		{
			//トラッキングに使うページID設定
			var page1:String = "/flash/433/";
			var page2:String = "/flash/peopot/";

			//イベントリスナー登録
			img1.addEventListener(MouseEvent.CLICK, clickTrack(page1));
			img2.addEventListener(MouseEvent.CLICK, clickTrack(page2));
		}

		public function clickTrack(pageID:String):Function
		{
			return function(event:MouseEvent):void
			{
				ExGA.tracker(pageID)
				//TextFieldにページIDを表示
				textArea.text = pageID;
			}
		}
	}
}
</pre>
<p>MouseEvent.CLICKで実行するclickTrackハンドラに引数を持たせ、その引数をExGAクラスのstatic関数trackに送って、MouseEventをもつハンドラ関数を定義しています。これによりクリックした画像により個別のページIDを持たせることができます。</p>
<p><a href="http://www.chimanaco.net/blog/sample/004/004.zip">サンプルデータ</a>(36KB)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimanaco.net/archives/20081122192257.php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash JavaScript Integration Kitを使ってFlashからJavaScriptを操作する</title>
		<link>http://blog.chimanaco.net/archives/20080903170226.php</link>
		<comments>http://blog.chimanaco.net/archives/20080903170226.php#comments</comments>
		<pubDate>Wed, 03 Sep 2008 08:02:26 +0000</pubDate>
		<dc:creator>chimanaco</dc:creator>
				<category><![CDATA[ActionScript2.0]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.chimanaco.net/wordpress/?p=10</guid>
		<description><![CDATA[今回やりたいことは、
ボタンを押すと別ウィンドウでFlashのスペシャルサイト表示。
開いたスペシャルサイトから元のページを操作（ページ遷移、focusを当て前面に出す）。
個人的には同じウィンドウで全て遷移して欲しいと [...]]]></description>
			<content:encoded><![CDATA[<p>今回やりたいことは、<br />
ボタンを押すと別ウィンドウでFlashのスペシャルサイト表示。<br />
開いたスペシャルサイトから元のページを操作（ページ遷移、focusを当て前面に出す）。<br />
個人的には同じウィンドウで全て遷移して欲しいところですが、これでやってみたいと想います。</p>
<p><a href="http://www.chimanaco.net//blog/sample/001/index.html">サンプル</a></p>
<p><span id="more-10"></span></p>
<h4>参考にさせて頂いたページ</h4>
<ul class="linkOut">
<li><a href="http://blog.burnercrew.com/2006/07/flash_javascript_integration_k.html">Flash / JavaScript Integration Kit &#8211; blog.burnercrew.com</a></li>
<li><a href="http://www.trick7.com/blog/2007/05/28-224730.php">trick7.com blog: Flash / JavaScript Integration kit 日本語訳</a></li>
<li><a href="http://www.himco.jp/allList.cfm">ヒム･カンパニー:翻訳記事全リスト文字表示</a>(62番)</li>
</ul>
<p>1. <a href="http://weblogs.macromedia.com/flashjavascript/">Flash / JavaScript Integration Kit</a>から最新版をダウンロードしておきます。</p>
<p>2. 1は一寸置いといて下準備。index.htmlからspecial.htmlを別ウィンドウで開く設定をします。<br />
&lt;head&gt;～&lt;/head&gt;部分に以下を記述。</p>
<pre>
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
function SWwopen(){
	window.open(&quot;special.html&quot;,&quot;SWindow&quot;, &quot;toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=400&quot;);
    }
//--&gt;
&lt;/script&gt;
</pre>
<p>続いて&lt;body&gt;～&lt;/body&gt;内該当する箇所に以下のような記述をします。</p>
<pre>
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;SWwopen()&quot;&gt;ウィンドウを開く&lt;/a&gt;
</pre>
<p>これで別ウィンドウを開く準備ができました。続いて別ウィンドウで開くspecial.htmlの設定をします。</p>
<p>ActionScriptからJavaScriptを操作する設定をします。まずhtml側。<br />
installationフォルダ内のJavaScriptFlashGateway.js、JavaScriptFlashGateway.swfを今回使用するフォルダに移動。<br />
HTMLにFlashProxyのインスタンスを生成するJavaScriptを記述します。<br />
※xxxの部分は任意です。
</p>
<pre>
&lt;script type=&quot;text/javascript&quot; src=&quot;xxx/JavaScriptFlashGateway.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot;&gt;
var lcId = new Date().getTime();
var flashProxy = new FlashProxy(lcId, &quot;xxx/JavaScriptFlashGateway.swf&quot;);
&lt;/script&gt;
</pre>
<p>body内にswfを表示するJavaScriptを記述。</p>
<pre>
&lt;script type=&quot;text/javascript&quot;&gt;
var tag = new FlashTag(&quot;xxx/xxxx.swf&quot;, swfのheight, swfのwidth); // last two arguments are height and width
tag.setFlashvars(&#039;lcId=&#039;+lcId);
tag.write(document);
&lt;/script&gt;
</pre>
<p>さらに元ウィンドウをページ遷移させ、focusを当てるJavaScriptを記述。</p>
<pre>
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
function GoWin(WO) {
	if (opener.closed) {
		NewWin=window.open(&quot;&quot;,&quot;MWindow&quot;);
		NewWin.location.href=WO;
		window.opener.focus();
		}
    else { opener.location.href=WO;
	window.opener.focus();
	}
}
//--&gt;
&lt;/script&gt;
</pre>
<p>続いてFlash側。&quot;source/flash/actionscript&quot; 内のライブラリファイルをクラスパスが通る場所に置いて、importします。さらに、JavaScriptProxyクラスのインスタンスを作成します。</p>
<pre>
import com.macromedia.javascript.JavaScriptProxy;
var proxy:JavaScriptProxy = new JavaScriptProxy();
</pre>
<p>ここで「&quot;com.macromedia.javascript.JavaScriptProxy&quot;がロードされませんでした。」というエラーが出て暫く足踏みしたのですが、参考にさせて頂いた<a href="http://blog.burnercrew.com/2006/07/flash_javascript_integration_k.html">Flash / JavaScript Integration Kit &#8211; blog.burnercrew.com</a>の、</p>
<blockquote><p>Windows 版の Flash は asファイルが BOM つきの UTF-8 で保存されてないとダメらしい。<br />
JavaScriptProxy.as と JavaScriptSerializer.as を Flash で一度開いてから保存しなおすことによって解決。</p></blockquote>
<p>を発見してひと安心。仰る通りにして解決。<br />
続いてJavaScriptの関数を呼び出す以下の記述をします。</p>
<pre>
proxy.call("javaScriptMethodName", "arg1", new Object());
</pre>
<p>俺の場合、html側の記述で関数名がGoWin()、引数にURLを取る設定になっています。<br />
Flash側ではボタンを2つ作り、btn_01、btn_02と名前をつけてそれぞれ押すとその設定が入るようにしています。<br />
ソースは以下のようになりました。</p>
<pre>
import com.macromedia.javascript.JavaScriptProxy;
var proxy:JavaScriptProxy = new JavaScriptProxy();

//インスタンス宣言
var btn_01:Button;
var btn_02:Button;

//変数宣言
var pageNum:Number;

//ブロードキャスター用オブジェクト
var objCast:Object = new Object();

//カスタムブロードキャスター初期化
AsBroadcaster.initialize(objCast);

//リスナー用オブジェクト
var objListener:Object = new Object();

//objListenerをobjCastのイベントリスナーに登録
objCast.addListener(objListener);

//関数定義
objListener.eventComplete = function():Void  {
	switch (pageNum) {
		case 1 :
			page = "page1.html";
			break;
		case 2 :
			page = "page2.html";
			break;
	}
	trace(pageNum);
	proxy.call("GoWin",page,new Object());
};

btn_01.onRelease = function() {
	pageNum = 1;
	objCast.broadcastMessage("eventComplete");
};

btn_02.onRelease = function() {
	pageNum = 2;
	objCast.broadcastMessage("eventComplete");
};
</pre>
<p>参考にさせて頂いたページも結構前の記事だったので、今はもっと好い方法があるのかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chimanaco.net/archives/20080903170226.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

