1. imp954sti

    Posted

    imp954sti
Changes in title
+FlexでListを使った時のマウスホイールの挙動制御
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,58 @@
+FlexでListを使った時にページ自体にスクロールがあるとListの中だけスクロールして欲しいのに
+ページ自体もスクロールして非常に使いづらかったりする。
+
+そこでExternalInterfaceを使ってswfがアクティブ・非アクティブになったタイミングで
+ページ側のマウスホイールの制御をすることでList内だけでスクロールすることができる。
+
+
+```mxml:Main.mxml
+<s:application active="activeHandler(event)" deactive="deactiveHandler(event)">
+ <fx:Script>
+ /**
+ * swfがアクティブになった
+ * @param event
+ */
+ protected function activateHandler( event:Event ):void {
+ ExternalInterface.call( "mouseEnabled", true );
+ }
+
+ /**
+ * swfが非アクティブになった
+ * @param event
+ */
+ protected function deactivateHandler( event:Event ):void {
+ ExternalInterface.call( "mouseEnabled", false );
+ }
+ </fx:Script>
+</s:application>
+```
+
+
+```js
+//ブラウザのホイールの状態(初期値有効)
+var _wheelEnabled = true;
+
+//Flashから呼ばれる関数
+function wheelEnabled(flg){
+ _wheelEnabled = flg;
+}
+
+//ホイールイベントの処理
+function wheel(event){
+ if(!_wheelEnabled){
+ if(!event){
+ event = window.event;
+ }
+ if(event.preventDefault){
+ event.preventDefault();
+ }
+ event.returnValue = false;
+ }
+}
+
+//イベントリスナーの登録
+if(window.addEventListener){
+ window.addEventListener('DOMMouseScroll', wheel, false);
+}
+window.onmousewheel = document.onmousewheel = wheel;
+```