光で始めるSilverlight
マウスに合わせて
2010/10/10  

やっほー、光だよ!
みんな、もう 台湾の公式サイト は見に行ってくれたかな? こんなページだよ!

Silverlightっていえば、やっぱ動きがないとね。
今回は、ちょっぴり動きを入れてみました。
気になる赤マルのところを・・・って、どこにマル付けてんのよっ!
な〜んか、「業界の人」の下心を感じるわね〜、、、
と、とにかく、こんな風にすればマウスの動きに反応するコンテンツができちゃうわけ。
   >> サンプルをダウンロード
今回のサンプルは、「4つのファイル+画像データ」からできてまーす。

・hajimete02.html  -- ブラウザから直接見る、HTMLページだね。
・Silverlight.js  -- Silverlightを使うときに必要な、お約束。
・hikaru1.xaml   -- Xaml 「ザムル」です。
・myScript.js   -- マウスの動きが書いてある JavaScript。
最初の2つ、hajimete02.html と Silverlight.js は、前回とほとんど同じだね。
大きな違いは、HTMLファイルの最初の方に、
<script type="text/javascript" src="myScript.js"></script>
っていう1行が追加されてるってこと。
ここに、今回新しく加わった myScript.js が埋め込まれてるね。

次に、Xamlファイル、hikaru1.xaml の中身を見てみると、画像の表示の仕方が書いてありまーす。

<Image Width="600" Height="450" Source="hikaru1.jpg"/>
こんな風に、Image の後に、幅、高さ、ファイル名を書くと、画像が表示できるの。

その下に、 <Ellipse で始まるタグがあるでしょ。

<Ellipse x:Name="top" Width="20" Height="20" Fill="#FF00FF" Canvas.Left="400" Canvas.Top="160"
MouseEnter="content_focus" MouseLeave="content_out" />
これは、円を描くやり方なんだ。そのまんま日本語に直すと、
<Ellipse x:この円の名前="top" 幅="20" 高さ="20" 中身の色="#FF00FF" 横の位置="400" 縦の位置="160"
マウスが入ったときは="content_focus" マウスが離れたときは="content_out" />
ざっとこんな意味。幅と高さを変えると楕円になるよ。
ここで大事なのは、
MouseEnter="content_focus" MouseLeave="content_out"
ってところ。
この、マウスが入ったときと、マウスが離れたときのことは、どうなっているのかな〜っていうと、
実は、今回新しく増えた myScript.js ってところに書いてあるんだ。

myScript.js の中身を見ると、

// マウスが入ったときの動作
function content_focus(sender, arg)
っていうのと、
// マウスが離れたときの動作
function content_out(sender, arg)
っていうのがあるよね。
これが、それぞれマウスが入ったときと、離れたときの動きになっているんだ。

さて、サンプル画面には上と下の、2つの赤マルがあるよね。
Xamlファイルを見ると、

上のマルが <Ellipse x:Name="top"
下のマルが <Ellipse x:Name="under"
ってなってるよ、わかるかな〜。
ここで1つ問題、
「マウスが入ったときに、上のマルに入ったのか、下のマルに入ったのか、どうやって見分けているのでしょうか?」
答、「名前で見分けている」。
上のマルには"top"っていう名前が付いていて、下のマルには"under"っていう名前が付いているよね。
myScript.js の中を見てみると、
if( sender.Name == "top" ){
ってあるでしょ。
これは、「もし名前が"top"だったら」っていう意味なんだよ。
つまり"sender.Name"っていうところに、実際にマウスが入ったマルの名前が入ってくるんだね。

じゃあ、もう1つ問題。
「マウスが入ってきたとき、どうやって、ロゴマークやプンスカを表示しているの?」
実はこれも、名前を使っているんです。
ロゴマークには"silver_logo"って名前が、プンスカには"punsuka"っていう名前が付いてまーす。

<Image x:Name="silver_logo"
<Image x:Name="punsuka"
そんでもって myScript.js の中で「ロゴマークさん、出てきてくださ〜い!」って呼び出すのは、
var img = hikaru1.content.findName( "silver_logo" );
って感じにするんだ。
こうすると、img のところにロゴマークさんが入ってくるの。
で、ロゴマークさんを出したり引っ込めたりするには、「Opacity」ってのを使います。
「Opacity」っていうのは、透明度のこと。
Opacity = 1.0 で 100% 見えていて、
Opacity = 0.5 なら半分シースルー、
Opacity = 0.0 で全然見えなくなっちゃいます。
・・・ってことは〜、
 ・まず最初は Opacity = 0.0 にしておいて、全然見えなくしておく。(hikaru1.xml)
 ・マウスが入ったら、Opacity = 1.0 にして、見えるようにする。(myScript.js の content_focus)
 ・マウスが出て行ったら、また Opacity = 0.0 に戻して、見えなくなる。(myScript.js の content_out)
こんなことをしてたんだ!

マウスにあわせた動き、わかってくれたかな〜?
こんなちょっとした仕掛けでも、案内板とか、コメントのポップアップとか、工夫次第でいろいろ使えるよね。
でも、Hなところに使うのは、どうかと思うなぁ・・・

ページ先頭に戻る▲