第一次写,请见谅!
背景:
使用Flex做开发,碰到一些需求,要求能够在Flex开发的swf中嵌入其他html页面.
或者将swf嵌入到其他页面.
解决思路:
在swf嵌入其他页面:
利用Iframe来进行嵌入,或本页弹框,或本页框架嵌入
网上有相关Flex开源的IFrame组件可供使用.名称叫 flex-iframe
在其他页面嵌入swf:
可以使用object 或者embed进行嵌入.也可以使用iframe引用一个object和embed包装的html页面
问题1描述: wmode 模式的选用 ,导致鼠标滚轮无效
wmode的三个模式分别为:window/Transparent/opaque
window:窗口模式,在没有指定wmode的时候,flash默认是以这种方式创建的。在这种模式下,flash拥有自己的窗口句柄,从而相对独立于浏览器的页面表现,独立的进行表现和渲染,所以窗口模式是相对其他模式来说效率最高的一种。同时也是因为它独立于浏览器的HTML渲染表面,所以当html的表现层和flash的表现层重合的时候,flash总是会遮住位置与他重合的所有html层。eg:你要做一个模态的提示框,想让灰色覆盖整个页面,但在有flash的情况,flash会不管你html中z-index的设置而表现在上层。 于是,就引出了第二种模式。
transparent :透明模式,这种模式类似于把flash放到html层结构里,可以通过z-index来进行层表现的传递和高度。在这种模式下flash会让可以透明的html层都以透明的方式展示在自己之上。这种对动画的性能表现的非常差,而且在9.0.115之前的flash player版本设置wmode=”transparent”会导致全屏模式失效。
Opaque:非透明模式,整个是相对于transparent方式来说的,它使flash隐藏html层上所有位于它后面的所有内容。
除了window模式外其他两个模式flash都没有自己的窗口句柄,表现力上会差很多.抛开表现上的差距,当非window模式下时,在Firefox/chrome浏览器下会发生事件滚轮无效的问题.ie9以上没有该问题,那么解决该问题的方法是:
通过js监听浏览器的鼠标滚轮事件,通过js和flash的function调用来实现对浏览器滚轮的实现.
具体做法如下:
if(!(document.all)) { if (document.addEventListener) { window.addEventListener("DOMMouseScroll", onMouseWheelHandler, false); } window.onmousewheel = document.onmousewheel = this.onMouseWheelHandler; //Opera/Chrome } function getFlashMovieObject(movieName){ if (window.document[movieName]) { return window.document[movieName]; } if (navigator.appName.indexOf("Microsoft Internet") == -1) { if (document.embeds && document.embeds[movieName]) return document.embeds[movieName]; }else { return document.getElementById(movieName); } } function onMouseWheelHandler(e){ var o = {x: e.screenX, y: e.screenY, delta: e.wheelDelta ? e.wheelDelta : -e.detail, ctrlKey: e.ctrlKey, altKey: e.altKey, shiftKey: e.shiftKey}; var vflash = getFlashMovieObject("${application}"); vflash.handleWheel(o); };
通过添加该段js脚本可以使得js可以调用flash为js注册的handleWheel方法.
在flex中我们需要添加该注册方法,在swf构建完毕后,添加如下内容
ExternalInterface.addCallback( "handleWheel" , handleWheel);
实现handleWheel方法
public function handleWheel(event:Object):void { var obj:InteractiveObject = null; var objects:Array = this.getObjectsUnderPoint(new Point(event.x, event.y)); for (var i:int = objects.length - 1; i >= 0; i--) { if (objects[i] is InteractiveObject) { obj = objects[i] as InteractiveObject; break; } else { if (objects[i] is Shape && (objects[i] as Shape).parent) { obj = (objects[i] as Shape).parent; break; } } } if (obj) { var mEvent:MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL, true, false, event.x, event.y, obj, event.ctrlKey, event.altKey, event.shiftKey, false, Number(event.delta) >0 ? 1:-1); obj.dispatchEvent(mEvent); } }
就可以实现在非window模式下 FF/Chrome 滚轮事件的响应了
问题2描述: wmode 模式的选用 ,导致鼠标滚轮无效-FireFox特殊处理
进行问题1的解决方法后,会发现在FireFox下仍然无效,解决方法是在flex中注册js调用方法前加入:
Security.allowDomain("*"); Security.allowInsecureDomain("*");同意FireFox的js可以调用访问该域下swf的方法.
问题3描述: wmode 模式的选用 ,导致ComboBox无法打开使用的处理方式
由于鼠标的滚轮事件会通过js来传递给ComboBox,原combobox的鼠标监听事件无法使用,会导致在combobox打开的状态下,会认为js传来的事件是combobox的外部事件,那么combobox会自动关闭listbase.
解决方法,自己动手写一个combobox,将combbox的listbase打开关闭状态记录下来.当在接到外部js的滚轮事件时 && 并且 combobox的listbase处理打开状态,那么手动处理combobox的滚动.
代码如下:
package com.loyo.ui { import flash.utils.Dictionary; import mx.controls.ComboBox; import mx.events.DropdownEvent; public class SelfComboBox extends ComboBox { public static var selfComboBoxNum:int = 0; public static var selfComboBoxDict:Dictionary = new Dictionary(); public static function getSCombobox(id:String):SelfComboBox{ return selfComboBoxDict[id]; } public static function setSelfComboBox(id:String,scombobox:SelfComboBox):void{ selfComboBoxDict[id] = scombobox; } public var isOpen:Boolean = false; public function SelfComboBox() { super(); this.id = "scombobox_"+selfComboBoxNum; selfComboBoxNum++; setSelfComboBox(this.id,this); addEventListener(DropdownEvent.OPEN,onDropdownOpen); addEventListener(DropdownEvent.CLOSE,onDropdownClose); } public function onDropdownOpen(event:DropdownEvent):void{ trace(" SelfComboBox isOpen : true" ); this.isOpen = true; } public function onDropdownClose(event:DropdownEvent):void{ trace(" SelfComboBox isOpen : false" ); this.isOpen = false; } public function doMouseWheelByJS(delta:Number):void{ if(isOpen){ if(delta > 0){ if(dropdown.selectedIndex > 0){ dropdown.selectedIndex--; } }else{ dropdown.selectedIndex++; } dropdown.scrollToIndex(dropdown.selectedIndex); } } } }
相关推荐
flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex...
首先,在Flex项目中引入`mx.controls.SWFLoader`库,然后创建一个`SWFLoader`实例,设置其`source`属性为Flash SWF文件的URL或本地路径。例如: ```xml <![CDATA[ private function loadFlash():void { flash...
Flex和Flash CS交互是开发富互联网应用程序...在项目中,`testAS3.fla`可能是包含AS3代码和交互逻辑的Flash源文件,`flexFlash.mxml`是Flex项目的主文件,而`testAS3.swf`是编译后的SWF文件,它将与Flex应用进行交互。
- Flash内容在HTML页面中嵌入后,需要正确设置SWFObject参数,以便Flex可以正确识别和调用。 4. **源码分析**: 通常,Flex项目中的源码会包含ActionScript代码,用于处理ExternalInterface的调用。在Flash项目中...
在IT行业中,Flex和Flash是两种非常重要的技术,它们在创建富互联网应用程序(RIA)时起着关键作用。本文将深入探讨Flex与Flash之间的交互,以及如何利用它们来构建动态、交互性强的Web应用程序。 Flex是由Adobe...
在Flex中,可以为每个组件设置`includeInLayout`属性和`zIndex`属性来控制它们在堆叠顺序中的位置。确保菜单组件的`zIndex`值高于IFrame,使其显示在IFrame之上。 2. **IFrame被隐藏**:这通常是因为IFrame的CSS...
因此,对于开发者而言,尤其是在使用Flex进行开发时,可能需要卸载旧版本的Flash Player以避免冲突或兼容性问题。 卸载Flash Player的步骤如下: 1. 打开操作系统中的“控制面板”(Windows)或“系统偏好设置”...
Flex和Flash是Adobe开发的两种相关但不同的技术,它们在Web开发中扮演着重要的角色,尤其是在富互联网应用程序(RIA)的构建中。本篇文章将深入探讨Flex与Flash之间的交互,以及如何实现它们之间的相互调用。 Flex...
1. **设计阶段**:在Flash中,你可以使用矢量绘图工具绘制所需的组件皮肤。这包括按钮、面板、滑块等。确保每个元素都是单独的图层,以便于管理和导出。 2. **导出图形**:完成设计后,将每个组件皮肤导出为SWF或...
博主可能展示了如何在Flex中设置事件监听器并响应Flash元件的事件。 7. **性能优化**:由于Flash元件可能会增加应用程序的内存消耗和渲染负担,博主可能提到了一些优化技巧,如减少不必要的元件实例化、缓存位图等...
在开发Flash游戏的过程中,FLEX和ActionScript是两个至关重要的技术。FLEX是一个开放源代码的框架,主要用于构建富互联网应用程序(RIA),而ActionScript是Adobe Flash平台中的编程语言,用于控制动画、交互性和...
这篇文章将深入探讨关于使用Flex和Flash生成SWF文件时所遇到的加载(体积)问题。SWF是Adobe Flash Player用于播放多媒体内容的文件格式,它包含了动画、交互式图形以及声音等多种元素。 首先,我们需要理解Flex和...
Flex(Flash)与.NET交互教程主要讲解了如何在Flex(基于Flash技术的RIA开发工具)和.NET框架之间建立通信,实现客户端与服务器端的数据交换。本文将深入介绍这个过程,包括必要的软件安装、项目的创建以及代码实现...
4. ExternalInterface:这个接口允许Flash内容与宿主环境(如HTML页面)进行通信,而Flex可以通过嵌入在HTML中的Flash Player与Flash内容进行交互。通过ExternalInterface,Flash可以调用JavaScript函数,而...
在这个文件中,你可以设置应用程序的属性,如宽度、高度、帧率等。例如: ```xml layout="absolute" width="600" height="400" frameRate="100" creationComplete="CreationComplete()" enterFrame="EnterFrame...
在IT行业中,Flex和Flash是两种非常重要的技术,它们在创建富互联网应用程序(RIA)时发挥了巨大作用。本文将深入探讨“Flex与Flash组合开发”的最佳实践,旨在帮助开发者更高效地利用这两种技术来构建交互性强、...
同时,Flex和Flash Builder也支持在应用程序中嵌入字体,或者使用HTML文本。 在外观设计方面,Flex和Flash Builder提供了丰富的外观设计基础知识,允许开发者为手机应用程序创建外观,并应用自定义手机外观。 在...
你需要确保在发布或测试环境中运行,或者更改Flash Player的安全设置以允许本地文件访问。此外,确保HTML和Flex的版本兼容,因为不同的版本可能有不同的API支持。 6. **调试与测试**:由于安全限制,调试过程可能...
Flex获取设置html cookie;Flex获取设置html cookie