不少视频网站flash播放器右键菜单里有一项“全屏”,点击之flash全屏显示,出现提示“按Esc键取消”,这效果一直让我觉得好神秘~今天终于揭开了神秘面纱:

Flash播放器全屏模式的实现方法

这里不说用JS改变document内容实现的全屏方法,而是FLASH 9以后一种新的实现方法.

首先HTML的

<object><embed>标记要添加一个allowfullscreen,值为true.

也就是加上<param name="allowFullScreen" value="true" />

AS2里是没有这个代码的,所以我们要手动添加.

打开你的Flash 8/(zh_cn)/First Run/Classes/FP8/Stage.as

在那一排申明的变量里加上下一句

static var displayState:String;

那么你的flash里,就可以使用

Stage["displayState"] = "fullScreen";

或者

Stage.displayState = "fullScreen";

来启动全屏了.

退出全屏

Stage.displayState = "Normal";

对全屏有影响的除了开始提到的allowfullscreen,还有scaleMode,默认设置是showAll,这以为全屏伸延了整个窗口后,比例保持不变.如果你需要控制尺寸,这个值就应该是noScale

差不多就这样了,实现全屏,只用你把按钮的功能做成改变 Stage的displayState是fullscreen或者Normal.当然,客户端的flash版本必须是9以上.
也可以和JS实现的全屏一起使用,让JS对应FLASH8以前的版本,此方法用于FLASH9以后的版本

——摘自东杰书屋

我用flash9 as2做了一个
首先我们需要设置舞台缩放模式为不缩放,以便全屏后不自动拉伸

Stage.scaleMode = "noscale";

我们可以做一个开关来控制舞台的全屏

function fullS() {
	switch (Stage.displayState) {
		case "fullScreen" :
			Stage.displayState = "normal";
			break;
		case "normal" :
		default :
			Stage.displayState = "fullScreen";
			break;
	}
}

然后将菜单项加上“全屏”,参见FLASH自定义右键菜单

var expandmenu = new ContextMenu();
expandmenu.hideBuiltInItems();
//new ContextMenuItem(caption, callbackFunction, [ separatorBefore, [ enabled, [ visible ] ] ] )
var btn1 = new ContextMenuItem("进入全屏", fullS);
expandmenu.customItems.push(btn1);
_root.menu = expandmenu;

全屏后右键菜单不能还是显示“进入全屏”吧?咱们再加个监听

StageLS = new Object();
StageLS.onResize = function() {
	switch (Stage.displayState) {
		case "fullScreen" :
			btn1.caption = "退出全屏";
			break;
		case "normal" :
		default :
			btn1.caption = "进入全屏";
			break;
	}
};
Stage.addListener(StageLS);

这样就OK啦,发布

源文件下载:点击下载此文件
ps:如果客户端flash播放器的版本在9以前的话是无法正常全屏的
现在正在郁闷:flex3里面没有flash.display.StageDisplayState这个包包,不知道怎么做全屏….