MouseWheel 버그해결방법
문제
플래시에서 스크롤바를 움직이기 위해 마우스휠기능을 사용할 때 브라우저 스크롤바와 같이 움직이는 현상.
해결
일본 spark 프로젝트 팀에서 만든 코드를 사용하면 해결할 수 있는데 사용법도 쉽다.
마우스휠버그 문제를 해결하기 위해 다양한 방법들을 사용하고 있는데 이 방법을 사용하는게 가장 쉽고 안전한거 같다. SWFWheel.as 라는 클래스를 플래시 내부로 임포트 시킨 후 stage를 초기화메서드 인자로 넘겨주기만 하면된다. 기본 원리는 스크롤제어 기능을 자바스크립트로 구현해서 그 값을 플래시로 넘겨받아서 스크롤을 구현하는 방식이다.
보통 자바스크립트는 html 에 구현하는데 ExternalInterface 클래스를 이용해 자바스크립트와 통신하는 부분을 클래스내부에 구현해서 사용했기 때문에 사용성에 있어서 아주 편리하고 모든 크로스OS, 크로스브라우저에서 구현된다는 장점이 있다.
참고링크
js 구현부 : http://www.libspark.org/browser/as3/SWFWheel/trunk/zoo/swfwheel.js
클래스 구현부 : http://www.libspark.org/browser/as3/SWFWheel/trunk/src/org/libspark/ui/SWFWheel.as
다운로드 링크 : http://www.libspark.org/svn/as3/SWFWheel/trunk/src/org/libspark/ui/
사용할땐 클래스 구현부에 있는 소스 SWFWheel.as 파일만 다운로드 받아서 사용하면 된다. 사용할땐 패키지구조를 맞춰서 사용하는걸 잊지말자.
- 사용법
import org.libspark.ui.SWFWheel;
//생성자 부분 또는 초기화 부분
public function 생성자()
{
Security.allowDomain( '허용도메인명');//크로스스크립팅 플래시 F1 도움말 참조
SWFWheel.initialize( stage );
SWFWheel.browserScroll = false;
}
//마우스휠 이벤트구현부
private function setEvent(): void
{
stage.addEventListener( MouseEvent.MOUSE_WHEEL, mouseWheelHandler );
}
private function mouseWheelHandler(): void
{
//내부메서드 구현
}
- html 내부 swfobject 구현부
var flashvars = {};
var params = {};
var attributes = {
id: "myContents",
name: "myContents";
}
swfobject.embedSWF("myContent.swf", "div_myContent", "550", "400", "9.0.0", flashvars, params, attributes );
- 추가로 확인해야할 부분
allowScriptAccess
SWF 파일을 로드하는 HTML 코드의
매개 변수는 SWF 파일 내에서 아웃바운드 스크립팅을 수행하는 기능을 제어합니다. SWF 파일을 호스트하는 웹 페이지의 HTML 코드에 이 매개 변수를 설정합니다. AllowScriptAccess
PARAM
또는 EMBED
태그에 매개 변수를 설정합니다.
매개 변수는 가능한 세 가지 값, AllowScriptAccess
"always"
, "sameDomain"
또는 "never"
중 하나를 가질 수 있습니다.
가AllowScriptAccess
"sameDomain"
이면 SWF 파일과 해당 웹 페이지가 동일한 도메인에 있는 경우에만 아웃바운드 스크립팅이 허용됩니다. AVM2 내용의 기본값입니다.
가AllowScriptAccess
"never"
이면 아웃바운드 스크립팅은 항상 실패합니다.
가AllowScriptAccess
"always"
이면 아웃바운드 스크립팅은 항상 성공합니다.
allowNetworking
SWF 내용을 포함하는 HTML 페이지의 <object>
및 <embed>
태그에서
매개 변수를 설정하여 네트워크 기능에 대한 SWF 파일의 액세스를 제어할 수 있습니다.allowNetworking
의 가능한 값은 다음과 같습니다.
allowNetworking
"all"
(기본값) - SWF에서 모든 네트워크 API가 허용됩니다."internal"
- SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없지만 다른 네트워킹 API를 호출할 수 있습니다."none"
- SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없고 마찬가지로 뒷부분에 나열되어 있는 모든 SWF 간 통신 API를 사용할 수 없습니다.
자세한 내용은 플래시 F1도움말 참조