<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Flashスクロールバーのサンプル（flaファイル付き） へのコメント</title>
	<atom:link href="http://www.trick7.com/blog/2006/08/08-112615.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.trick7.com/blog/2006/08/08-112615.php</link>
	<description>flashの勉強・書籍・サイトについて</description>
	<lastBuildDate>Tue, 13 Sep 2011 14:17:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>u-suke より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-72630</link>
		<dc:creator>u-suke</dc:creator>
		<pubDate>Sat, 21 Mar 2009 05:03:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-72630</guid>
		<description>tera様

お返事有り難うございます。
いろいろと試した結果、並列でできる様になりました。が、横スクロールの方が、
function contentsEnterFrame() {
	content_mc2.flg = true;
	content_mc2.onEnterFrame = function() {
		var dis:Number = this.goalX-this._x;
		if (this.flg &#124;&#124; Math.abs(dis)&gt;1) {
			this._x += dis*friction;
		} else {
			delete this.onEnterFrame;
		}
	};
}
の部分の機能をしません。

//左カーソルをクリックした時
cursor_up2.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	pressUp2 = true;
};

左右各ボタンでactiveScrollは機能する（つまり左右に移動する）のですがcontentsEnterFrameの働き（減速スクロール）をしません。[function cntentsEnterFrame]関数名を変えてみたりもしましたが結果は同じでした。考えられる原因は何でしょう？また、お時間あるときにご教授下さい。</description>
		<content:encoded><![CDATA[							<p>tera様</p>
							<p>お返事有り難うございます。<br />
							いろいろと試した結果、並列でできる様になりました。が、横スクロールの方が、<br />
							function contentsEnterFrame() {<br />
								content_mc2.flg = true;<br />
								content_mc2.onEnterFrame = function() {<br />
									var dis:Number = this.goalX-this._x;<br />
									if (this.flg || Math.abs(dis)&gt;1) {<br />
										this._x += dis*friction;<br />
									} else {<br />
										delete this.onEnterFrame;<br />
									}<br />
								};<br />
							}<br />
							の部分の機能をしません。</p>
							<p>//左カーソルをクリックした時<br />
							cursor_up2.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								pressUp2 = true;<br />
							};</p>
							<p>左右各ボタンでactiveScrollは機能する（つまり左右に移動する）のですがcontentsEnterFrameの働き（減速スクロール）をしません。[function cntentsEnterFrame]関数名を変えてみたりもしましたが結果は同じでした。考えられる原因は何でしょう？また、お時間あるときにご教授下さい。</p>
]]></content:encoded>
	</item>
	<item>
		<title>tera より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-67194</link>
		<dc:creator>tera</dc:creator>
		<pubDate>Tue, 17 Mar 2009 08:42:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-67194</guid>
		<description>u-sukeさま
こんにちは。コメントありがとうございます。
すみませんが、僕自身入れ子にした経験がないのと、ちょっと作られようとしているflaの構造が理解しきれませんで、スマートなご回答は出せないのですが、インスタンス名・変数名を絶対に重複しないようにすれば並列で登場させることもできるはずだとしか、コメントできない感じです。
すいません。
（最近AS3ばかり書いていたので、こないだAS2でリンケージをaddする方法すら忘れていたレベルです僕。）</description>
		<content:encoded><![CDATA[							<p>u-sukeさま<br />
							こんにちは。コメントありがとうございます。<br />
							すみませんが、僕自身入れ子にした経験がないのと、ちょっと作られようとしているflaの構造が理解しきれませんで、スマートなご回答は出せないのですが、インスタンス名・変数名を絶対に重複しないようにすれば並列で登場させることもできるはずだとしか、コメントできない感じです。<br />
							すいません。<br />
							（最近AS3ばかり書いていたので、こないだAS2でリンケージをaddする方法すら忘れていたレベルです僕。）</p>
]]></content:encoded>
	</item>
	<item>
		<title>u-suke より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-67104</link>
		<dc:creator>u-suke</dc:creator>
		<pubDate>Tue, 17 Mar 2009 07:24:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-67104</guid>
		<description>はじめまして、いつも参考にさせて頂いており、大変助かっています。
試行錯誤しながら、設置に励んでおりますが、一つ問題がありまして質問させて頂きます。
現在アップ中の縦スクロールの下に、横スクロールのマスクも設けたいと考えております。イメージとしては縦にテキスト、横に写真。同じMC上に配置してみた時は、変数名やインスタンス名を微妙にずらして２つのスクロールスクリプトを設置しましたが誤作動を起こします。また、新しいMCに横スクロールを作り、縦スクロールのMCに設置すると、各変数やインスタンスが絶対パスでないと反応しない所や、そうでない所などがあり、困難しております。
この場合どのような方法が望ましいのでしょう？

現在以下の様に置いています。

縦スクロールMC　　 スクリプト
　　　　　　　　　　マスク
　　　　　　　　　　カーソル
　　　　　　　　　　バー等々
　　　　　　　　　　横スクロールMC　スクリプト
　　　　　　　　　　　　　　　　　　  マスク
　　　　　　　　　　　　　　　　　　  カーソル
　　　　　　　　　　　　　　　　　　  バー等々</description>
		<content:encoded><![CDATA[							<p>はじめまして、いつも参考にさせて頂いており、大変助かっています。<br />
							試行錯誤しながら、設置に励んでおりますが、一つ問題がありまして質問させて頂きます。<br />
							現在アップ中の縦スクロールの下に、横スクロールのマスクも設けたいと考えております。イメージとしては縦にテキスト、横に写真。同じMC上に配置してみた時は、変数名やインスタンス名を微妙にずらして２つのスクロールスクリプトを設置しましたが誤作動を起こします。また、新しいMCに横スクロールを作り、縦スクロールのMCに設置すると、各変数やインスタンスが絶対パスでないと反応しない所や、そうでない所などがあり、困難しております。<br />
							この場合どのような方法が望ましいのでしょう？</p>
							<p>現在以下の様に置いています。</p>
							<p>縦スクロールMC　　 スクリプト<br />
							　　　　　　　　　　マスク<br />
							　　　　　　　　　　カーソル<br />
							　　　　　　　　　　バー等々<br />
							　　　　　　　　　　横スクロールMC　スクリプト<br />
							　　　　　　　　　　　　　　　　　　  マスク<br />
							　　　　　　　　　　　　　　　　　　  カーソル<br />
							　　　　　　　　　　　　　　　　　　  バー等々</p>
]]></content:encoded>
	</item>
	<item>
		<title>mutumi より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-53001</link>
		<dc:creator>mutumi</dc:creator>
		<pubDate>Fri, 27 Feb 2009 03:40:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-53001</guid>
		<description>ありがとうございます。
がんばってみます。

もし実現しましたらレポートしたいと思います。</description>
		<content:encoded><![CDATA[							<p>ありがとうございます。<br />
							がんばってみます。</p>
							<p>もし実現しましたらレポートしたいと思います。</p>
]]></content:encoded>
	</item>
	<item>
		<title>tera より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-14220</link>
		<dc:creator>tera</dc:creator>
		<pubDate>Tue, 20 Jan 2009 04:37:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-14220</guid>
		<description>startDrag(false, 0, this._x, xMax, this._x);
のxMaxを実際のコンテンツの幅に置き換えるとか（上記コメント中にもあったかと思いますが、ダイナミックに中身作ってるとxMaxがおかしくなるケースがあったかも）、全般に変数をなるたけ実数値に置き換えたり、コードを部分的に削るなりで、デバッグしていただくしかないかと思います。
たしか上のコメントか、関連コメントのどこかに横スクロールバー化した人がいたと思うので、できることはできそうな気がします。</description>
		<content:encoded><![CDATA[							<p>startDrag(false, 0, this._x, xMax, this._x);<br />
							のxMaxを実際のコンテンツの幅に置き換えるとか（上記コメント中にもあったかと思いますが、ダイナミックに中身作ってるとxMaxがおかしくなるケースがあったかも）、全般に変数をなるたけ実数値に置き換えたり、コードを部分的に削るなりで、デバッグしていただくしかないかと思います。<br />
							たしか上のコメントか、関連コメントのどこかに横スクロールバー化した人がいたと思うので、できることはできそうな気がします。</p>
]]></content:encoded>
	</item>
	<item>
		<title>mutumi より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-14189</link>
		<dc:creator>mutumi</dc:creator>
		<pubDate>Tue, 20 Jan 2009 04:11:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-14189</guid>
		<description>メールアドレス間違って記入してました。すみません…

追送ですみませんが、横スクロールのスクリプトは基本的に_heightと_yを、_widthと_xに変え、this.startDrag(false, 0, this._x, xMax, this._x);に変更すればいいんじゃないかなあ、とか思ってたんですけど、ちがうんですかね、なにかが。
もしくはインスタンスを横にしたときに問題が起こってたりするんでしょうか…。横用にシンボル作ってみたんですけど、うまく改善できず…でした…。</description>
		<content:encoded><![CDATA[							<p>メールアドレス間違って記入してました。すみません…</p>
							<p>追送ですみませんが、横スクロールのスクリプトは基本的に_heightと_yを、_widthと_xに変え、this.startDrag(false, 0, this._x, xMax, this._x);に変更すればいいんじゃないかなあ、とか思ってたんですけど、ちがうんですかね、なにかが。<br />
							もしくはインスタンスを横にしたときに問題が起こってたりするんでしょうか…。横用にシンボル作ってみたんですけど、うまく改善できず…でした…。</p>
]]></content:encoded>
	</item>
	<item>
		<title>mutumi より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-14176</link>
		<dc:creator>mutumi</dc:creator>
		<pubDate>Tue, 20 Jan 2009 04:04:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-14176</guid>
		<description>すばやい御回答、ありがとうございます。

if (scrollSet.sBar._xxMax) {
を
if (scrollSet.sBar._xMax) {
と直してみたんですが、変わりませんでした…。

どうやらOnRelease後の挙動がおかしいようなんです…。
バーがOnRelease後に上下にいったり来たりで…


お手すきのときでもよろしいので、もしなにかわかったりしたら是非どなたか教えてくださいませ～。</description>
		<content:encoded><![CDATA[							<p>すばやい御回答、ありがとうございます。</p>
							<p>if (scrollSet.sBar._xxMax) {<br />
							を<br />
							if (scrollSet.sBar._xMax) {<br />
							と直してみたんですが、変わりませんでした…。</p>
							<p>どうやらOnRelease後の挙動がおかしいようなんです…。<br />
							バーがOnRelease後に上下にいったり来たりで…</p>
							<p>お手すきのときでもよろしいので、もしなにかわかったりしたら是非どなたか教えてくださいませ～。</p>
]]></content:encoded>
	</item>
	<item>
		<title>tera より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-13704</link>
		<dc:creator>tera</dc:creator>
		<pubDate>Mon, 19 Jan 2009 06:45:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-13704</guid>
		<description>ちょっと今忙しくて詳しいコードレビューはできないのですが、一か所
if (scrollSet.sBar._xxMax) {
という記述がありますけど、そこは関係ありますでしょうか？
yをxにしていれば高さが変わるという現象はあまり起こらないとは思うんですが、ちょっとコードみただけでは分かりませんでしたー。</description>
		<content:encoded><![CDATA[							<p>ちょっと今忙しくて詳しいコードレビューはできないのですが、一か所<br />
							if (scrollSet.sBar._xxMax) {<br />
							という記述がありますけど、そこは関係ありますでしょうか？<br />
							yをxにしていれば高さが変わるという現象はあまり起こらないとは思うんですが、ちょっとコードみただけでは分かりませんでしたー。</p>
]]></content:encoded>
	</item>
	<item>
		<title>mutumi より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-13693</link>
		<dc:creator>mutumi</dc:creator>
		<pubDate>Mon, 19 Jan 2009 06:05:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-13693</guid>
		<description>よく使わせていただいております。
今回はサイトのトップで使ってみたいと思って、チャレンジしてるんですが、
「横にコンテンツをスクロールさせて、スクロールバーも横にさせる」
という作り変えでつまづいています。
下に掲載したスクリプトだと
「スクロールバーの高さが、行きと帰りで変わってしまう」
という現象に陥ってしまいます。
なにが原因なのでしょうか？

//なめらかに止まるための抵抗。値が小さいほど減速大。
var friction = 0.2;
//スクロールバーの背景をクリックしたときの抵抗
var backFriction = 0.05;
//上下カーソルを押下時の移動量
var coursorMove = 3;
//マウスホイール回転時の移動係数（Windowsのみ）
var wheelMove = 1.5;
//---------------------------------------------
//マスクを設定
content_mc.setMask(mask_mc);
//初期化
init();

function init():Void{
	//相関する比率を求める
	mPc = mask_mc._width/content_mc._width;
	mPb = mask_mc._width/scrollSet.sBack._width;
	//比率に応じてスライダーバーの高さを伸縮
	scrollSet.sBar._width = scrollSet.sBack._width*mPc;
	//スライダーの移動範囲の下限
	xMax = scrollSet.sBack._width-scrollSet.sBar._width;
}
//スライダーバーの位置に応じて、コンテンツの位置を移動させる関数
function activeScroll() {
	content_mc.goalX = -scrollSet.sBar._x/mPc*mPb;
	if (sliderbackPress == true) {
		if ((scrollSet.sBar._x - scrollSet.sBack._xmouse)*stepMove &lt; 0) {
			scrollSet.sBar._x += stepMove;
		}
	}
	if (pressUp == true) {
		scrollSet.sBar._x -= coursorMove;
	}
	if (pressDown == true) {
		scrollSet.sBar._x += coursorMove;
	}
	if (scrollSet.sBar._xxMax) {
		scrollSet.sBar._x = xMax;
		
	}
}
//2008.4.30追記：減速スクロールのための関数
function contentsEnterFrame () {
	content_mc.flg = true;
	content_mc.onEnterFrame = function  () {
		var dis:Number = this.goalX - this._x
		if(this.flg &#124;&#124; Math.abs(dis)&gt;1){
			this._x += dis*friction
		}else{
			delete this.onEnterFrame;
		}
	}
}
//スライダーのバーをドラッグした時
scrollSet.sBar.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	this.startDrag(false, 0, this._x, xMax, this._x);
};
scrollSet.sBar.onRelease = scrollSet.sBar.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	this.stopDrag();
};
//スライダーの後ろの部分をクリックした時
scrollSet.sBack.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	sliderbackPress = true;
	stepMove = (this._xmouse-this._parent.sBar._x)*backFriction;
};
scrollSet.sBack.onRelease = scrollSet.sBack.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	sliderbackPress = false;
};
//上カーソルをクリックした時
cursor_up.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	pressUp = true;
};
cursor_up.onRelease = cursor_up.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	pressUp = false;
};
//下カーソルをクリックした時
cursor_down.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	pressDown = true;
};
cursor_down.onRelease = cursor_down.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	pressDown = false;
};
//11.9追記：マスクよりコンテンツが短い場合は、スクロールバーは非表示にする
if (mPc&gt;=1) {
	scrollSet._visible = false;
	cursor_up._visible = false;
	cursor_down._visible = false;
}
//2007.2.7追記：マウスホイールでスクロールさせる（Windowsのみ対応）
var wheelListner:Object = new Object();
wheelListner.onMouseWheel = function(delta) {
	var goal = scrollSet.sBar._x- delta*wheelMove
	if(goal =xMax){
		scrollSet.sBar._x = xMax;
	}else{
		scrollSet.sBar._x = goal;
	}
	contentsEnterFrame();
	activeScroll();
};
Mouse.addListener(wheelListner);</description>
		<content:encoded><![CDATA[							<p>よく使わせていただいております。<br />
							今回はサイトのトップで使ってみたいと思って、チャレンジしてるんですが、<br />
							「横にコンテンツをスクロールさせて、スクロールバーも横にさせる」<br />
							という作り変えでつまづいています。<br />
							下に掲載したスクリプトだと<br />
							「スクロールバーの高さが、行きと帰りで変わってしまう」<br />
							という現象に陥ってしまいます。<br />
							なにが原因なのでしょうか？</p>
							<p>//なめらかに止まるための抵抗。値が小さいほど減速大。<br />
							var friction = 0.2;<br />
							//スクロールバーの背景をクリックしたときの抵抗<br />
							var backFriction = 0.05;<br />
							//上下カーソルを押下時の移動量<br />
							var coursorMove = 3;<br />
							//マウスホイール回転時の移動係数（Windowsのみ）<br />
							var wheelMove = 1.5;<br />
							//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
							//マスクを設定<br />
							content_mc.setMask(mask_mc);<br />
							//初期化<br />
							init();</p>
							<p>function init():Void{<br />
								//相関する比率を求める<br />
								mPc = mask_mc._width/content_mc._width;<br />
								mPb = mask_mc._width/scrollSet.sBack._width;<br />
								//比率に応じてスライダーバーの高さを伸縮<br />
								scrollSet.sBar._width = scrollSet.sBack._width*mPc;<br />
								//スライダーの移動範囲の下限<br />
								xMax = scrollSet.sBack._width-scrollSet.sBar._width;<br />
							}<br />
							//スライダーバーの位置に応じて、コンテンツの位置を移動させる関数<br />
							function activeScroll() {<br />
								content_mc.goalX = -scrollSet.sBar._x/mPc*mPb;<br />
								if (sliderbackPress == true) {<br />
									if ((scrollSet.sBar._x &#8211; scrollSet.sBack._xmouse)*stepMove &lt; 0) {<br />
										scrollSet.sBar._x += stepMove;<br />
									}<br />
								}<br />
								if (pressUp == true) {<br />
									scrollSet.sBar._x -= coursorMove;<br />
								}<br />
								if (pressDown == true) {<br />
									scrollSet.sBar._x += coursorMove;<br />
								}<br />
								if (scrollSet.sBar._xxMax) {<br />
									scrollSet.sBar._x = xMax;</p>
							<p>	}<br />
							}<br />
							//2008.4.30追記：減速スクロールのための関数<br />
							function contentsEnterFrame () {<br />
								content_mc.flg = true;<br />
								content_mc.onEnterFrame = function  () {<br />
									var dis:Number = this.goalX &#8211; this._x<br />
									if(this.flg || Math.abs(dis)&gt;1){<br />
										this._x += dis*friction<br />
									}else{<br />
										delete this.onEnterFrame;<br />
									}<br />
								}<br />
							}<br />
							//スライダーのバーをドラッグした時<br />
							scrollSet.sBar.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								this.startDrag(false, 0, this._x, xMax, this._x);<br />
							};<br />
							scrollSet.sBar.onRelease = scrollSet.sBar.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								this.stopDrag();<br />
							};<br />
							//スライダーの後ろの部分をクリックした時<br />
							scrollSet.sBack.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								sliderbackPress = true;<br />
								stepMove = (this._xmouse-this._parent.sBar._x)*backFriction;<br />
							};<br />
							scrollSet.sBack.onRelease = scrollSet.sBack.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								sliderbackPress = false;<br />
							};<br />
							//上カーソルをクリックした時<br />
							cursor_up.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								pressUp = true;<br />
							};<br />
							cursor_up.onRelease = cursor_up.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								pressUp = false;<br />
							};<br />
							//下カーソルをクリックした時<br />
							cursor_down.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								pressDown = true;<br />
							};<br />
							cursor_down.onRelease = cursor_down.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								pressDown = false;<br />
							};<br />
							//11.9追記：マスクよりコンテンツが短い場合は、スクロールバーは非表示にする<br />
							if (mPc&gt;=1) {<br />
								scrollSet._visible = false;<br />
								cursor_up._visible = false;<br />
								cursor_down._visible = false;<br />
							}<br />
							//2007.2.7追記：マウスホイールでスクロールさせる（Windowsのみ対応）<br />
							var wheelListner:Object = new Object();<br />
							wheelListner.onMouseWheel = function(delta) {<br />
								var goal = scrollSet.sBar._x- delta*wheelMove<br />
								if(goal =xMax){<br />
									scrollSet.sBar._x = xMax;<br />
								}else{<br />
									scrollSet.sBar._x = goal;<br />
								}<br />
								contentsEnterFrame();<br />
								activeScroll();<br />
							};<br />
							Mouse.addListener(wheelListner);</p>
]]></content:encoded>
	</item>
	<item>
		<title>shin より</title>
		<link>http://www.trick7.com/blog/2006/08/08-112615.php/comment-page-1#comment-13690</link>
		<dc:creator>shin</dc:creator>
		<pubDate>Mon, 19 Jan 2009 05:54:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.trick7.com/wordpress/?p=90#comment-13690</guid>
		<description>横にコンテンツをスクロールさせて、スクロールバーも横にするのにてこずっております。
下のようなスクリプトにしたんですが、
スクロールバーを左から右へ目いっぱい移動すると、バーが下へずれて、
左へめいっぱい戻すと、元の位置に戻る、というような現象になるのはなぜでしょうか？

-----------------------------------------------------------------------------
//なめらかに止まるための抵抗。値が小さいほど減速大。
var friction = 0.2;
//スクロールバーの背景をクリックしたときの抵抗
var backFriction = 0.05;
//上下カーソルを押下時の移動量
var coursorMove = 3;
//マウスホイール回転時の移動係数（Windowsのみ）
var wheelMove = 1.5;
//---------------------------------------------
//マスクを設定
content_mc.setMask(mask_mc);
//初期化
init();

function init():Void{
	//相関する比率を求める
	mPc = mask_mc._width/content_mc._width;
	mPb = mask_mc._width/scrollSet.sBack._width;
	//比率に応じてスライダーバーの高さを伸縮
	scrollSet.sBar._width = scrollSet.sBack._width*mPc;
	//スライダーの移動範囲の下限
	xMax = scrollSet.sBack._width-scrollSet.sBar._width;
}
//スライダーバーの位置に応じて、コンテンツの位置を移動させる関数
function activeScroll() {
	content_mc.goalX = -scrollSet.sBar._x/mPc*mPb;
	if (sliderbackPress == true) {
		if ((scrollSet.sBar._x - scrollSet.sBack._xmouse)*stepMove &lt; 0) {
			scrollSet.sBar._x += stepMove;
		}
	}
	if (pressUp == true) {
		scrollSet.sBar._x -= coursorMove;
	}
	if (pressDown == true) {
		scrollSet.sBar._x += coursorMove;
	}
	if (scrollSet.sBar._xxMax) {
		scrollSet.sBar._x = xMax;
		
	}
}
//2008.4.30追記：減速スクロールのための関数
function contentsEnterFrame () {
	content_mc.flg = true;
	content_mc.onEnterFrame = function  () {
		var dis:Number = this.goalX - this._x
		if(this.flg &#124;&#124; Math.abs(dis)&gt;1){
			this._x += dis*friction
		}else{
			delete this.onEnterFrame;
		}
	}
}
//スライダーのバーをドラッグした時
scrollSet.sBar.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	this.startDrag(false, 0, this._x, xMax, this._x);
};
scrollSet.sBar.onRelease = scrollSet.sBar.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	this.stopDrag();
};
//スライダーの後ろの部分をクリックした時
scrollSet.sBack.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	sliderbackPress = true;
	stepMove = (this._xmouse-this._parent.sBar._x)*backFriction;
};
scrollSet.sBack.onRelease = scrollSet.sBack.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	sliderbackPress = false;
};
//上カーソルをクリックした時
cursor_up.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	pressUp = true;
};
cursor_up.onRelease = cursor_up.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	pressUp = false;
};
//下カーソルをクリックした時
cursor_down.onPress = function() {
	contentsEnterFrame();
	this.onEnterFrame = activeScroll;
	pressDown = true;
};
cursor_down.onRelease = cursor_down.onReleaseOutside=function () {
	content_mc.flg = false;
	delete this.onEnterFrame;
	pressDown = false;
};
//11.9追記：マスクよりコンテンツが短い場合は、スクロールバーは非表示にする
if (mPc&gt;=1) {
	scrollSet._visible = false;
	cursor_up._visible = false;
	cursor_down._visible = false;
}
//2007.2.7追記：マウスホイールでスクロールさせる（Windowsのみ対応）
var wheelListner:Object = new Object();
wheelListner.onMouseWheel = function(delta) {
	var goal = scrollSet.sBar._x- delta*wheelMove
	if(goal =xMax){
		scrollSet.sBar._x = xMax;
	}else{
		scrollSet.sBar._x = goal;
	}
	contentsEnterFrame();
	activeScroll();
};
Mouse.addListener(wheelListner);</description>
		<content:encoded><![CDATA[							<p>横にコンテンツをスクロールさせて、スクロールバーも横にするのにてこずっております。<br />
							下のようなスクリプトにしたんですが、<br />
							スクロールバーを左から右へ目いっぱい移動すると、バーが下へずれて、<br />
							左へめいっぱい戻すと、元の位置に戻る、というような現象になるのはなぜでしょうか？</p>
							<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
							//なめらかに止まるための抵抗。値が小さいほど減速大。<br />
							var friction = 0.2;<br />
							//スクロールバーの背景をクリックしたときの抵抗<br />
							var backFriction = 0.05;<br />
							//上下カーソルを押下時の移動量<br />
							var coursorMove = 3;<br />
							//マウスホイール回転時の移動係数（Windowsのみ）<br />
							var wheelMove = 1.5;<br />
							//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
							//マスクを設定<br />
							content_mc.setMask(mask_mc);<br />
							//初期化<br />
							init();</p>
							<p>function init():Void{<br />
								//相関する比率を求める<br />
								mPc = mask_mc._width/content_mc._width;<br />
								mPb = mask_mc._width/scrollSet.sBack._width;<br />
								//比率に応じてスライダーバーの高さを伸縮<br />
								scrollSet.sBar._width = scrollSet.sBack._width*mPc;<br />
								//スライダーの移動範囲の下限<br />
								xMax = scrollSet.sBack._width-scrollSet.sBar._width;<br />
							}<br />
							//スライダーバーの位置に応じて、コンテンツの位置を移動させる関数<br />
							function activeScroll() {<br />
								content_mc.goalX = -scrollSet.sBar._x/mPc*mPb;<br />
								if (sliderbackPress == true) {<br />
									if ((scrollSet.sBar._x &#8211; scrollSet.sBack._xmouse)*stepMove &lt; 0) {<br />
										scrollSet.sBar._x += stepMove;<br />
									}<br />
								}<br />
								if (pressUp == true) {<br />
									scrollSet.sBar._x -= coursorMove;<br />
								}<br />
								if (pressDown == true) {<br />
									scrollSet.sBar._x += coursorMove;<br />
								}<br />
								if (scrollSet.sBar._xxMax) {<br />
									scrollSet.sBar._x = xMax;</p>
							<p>	}<br />
							}<br />
							//2008.4.30追記：減速スクロールのための関数<br />
							function contentsEnterFrame () {<br />
								content_mc.flg = true;<br />
								content_mc.onEnterFrame = function  () {<br />
									var dis:Number = this.goalX &#8211; this._x<br />
									if(this.flg || Math.abs(dis)&gt;1){<br />
										this._x += dis*friction<br />
									}else{<br />
										delete this.onEnterFrame;<br />
									}<br />
								}<br />
							}<br />
							//スライダーのバーをドラッグした時<br />
							scrollSet.sBar.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								this.startDrag(false, 0, this._x, xMax, this._x);<br />
							};<br />
							scrollSet.sBar.onRelease = scrollSet.sBar.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								this.stopDrag();<br />
							};<br />
							//スライダーの後ろの部分をクリックした時<br />
							scrollSet.sBack.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								sliderbackPress = true;<br />
								stepMove = (this._xmouse-this._parent.sBar._x)*backFriction;<br />
							};<br />
							scrollSet.sBack.onRelease = scrollSet.sBack.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								sliderbackPress = false;<br />
							};<br />
							//上カーソルをクリックした時<br />
							cursor_up.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								pressUp = true;<br />
							};<br />
							cursor_up.onRelease = cursor_up.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								pressUp = false;<br />
							};<br />
							//下カーソルをクリックした時<br />
							cursor_down.onPress = function() {<br />
								contentsEnterFrame();<br />
								this.onEnterFrame = activeScroll;<br />
								pressDown = true;<br />
							};<br />
							cursor_down.onRelease = cursor_down.onReleaseOutside=function () {<br />
								content_mc.flg = false;<br />
								delete this.onEnterFrame;<br />
								pressDown = false;<br />
							};<br />
							//11.9追記：マスクよりコンテンツが短い場合は、スクロールバーは非表示にする<br />
							if (mPc&gt;=1) {<br />
								scrollSet._visible = false;<br />
								cursor_up._visible = false;<br />
								cursor_down._visible = false;<br />
							}<br />
							//2007.2.7追記：マウスホイールでスクロールさせる（Windowsのみ対応）<br />
							var wheelListner:Object = new Object();<br />
							wheelListner.onMouseWheel = function(delta) {<br />
								var goal = scrollSet.sBar._x- delta*wheelMove<br />
								if(goal =xMax){<br />
									scrollSet.sBar._x = xMax;<br />
								}else{<br />
									scrollSet.sBar._x = goal;<br />
								}<br />
								contentsEnterFrame();<br />
								activeScroll();<br />
							};<br />
							Mouse.addListener(wheelListner);</p>
]]></content:encoded>
	</item>
</channel>
</rss>

