时光博客 - WEB开发中的可用性和用户体验
Tag: flash

FLASH设为首页解决方案

因为一般的flash网站中,都需要添加一个设为首页和添加收藏,添加收藏已经解决了,这些代码网上很多,就不在这里写出来,需要的朋友可以去Google.com搜索,本文讨论一下FLASH中如何设置首页。

设置首页问题,在网上搜索了不少,答案都是不准确的,始终没有找到很好的解决方案。不过自己用了一个小把戏来实现了FLASH设为首页,而且各个浏览器中均可以实现。

首先来看下效果

IE内核下:

sp08.jpg

大小: 143.24 K
尺寸: 500 x 293
浏览: 378 次
点击打开新窗口浏览全图

FF下的截图:

(因为FF的安全性问题,所以必须请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true)

sethome.jpg

大小: 48.35 K
尺寸: 500 x 109
浏览: 343 次
点击打开新窗口浏览全图

sp09.jpg

大小: 104.92 K
尺寸: 500 x 261
浏览: 327 次
点击打开新窗口浏览全图

原理:

相信大家看那个那个覆盖在FLASH上面的黑色遮罩层,对,我的解决方案是,用层的相对来定位,当然这个工作不需要FLASH设计人员来实现,只要在场景里面有设为首页几个字即可,不需要添加任何AS代码。

层级默认的属性值都是static,静态。就不用多说了。最关键的是relative(相对)以及absolute(绝对)。
往往我们如果是COPY别人的代码,会把absolute属性与left、top配合起来制作相关的“悬浮层”效果。然而有时候我们需要针对某一个容器的悬浮效果,而不是针对窗口的。这时候通过高度、宽度的计算不但麻烦,而且几乎无法完美实现效果。我一开始也无能为力,后来发现只要把其上一级的样式属性 position设置为relative就可以了。

也就是说,position的属性值的效果,直接受其容器样式中position属性值影响。
例如如下A-B的嵌套结构
<div id="A">
<div id="B">
</div>
</div>

当A的position为relative时,B的position为absolute才有效。这时候left:0、top:0就不再针对窗口文档,而是针对id为A的这个div了。

 

XHTML代码如下:

  1. <div id="flashArea"> 
  2.     <div id="setArea" onclick="setHomepage();"></div> 
  3.         <object>中间为插入的FLASH</object> 
  4. </div> 

因为是相对于FLASH层来定位,所以一定要把要定位的层插入在FLASH层里面,这样他的父级DIV就是FLASH。

JS代码如下:

  1. <script type="text/javascript"
  2.  function setHomepage() 
  3.  if (document.all) 
  4.     { 
  5.         document.body.style.behavior='url(#default#homepage)'
  6.         document.body.setHomePage('http://liupeng.us'); 
  7.     } 
  8.     else if (window.sidebar) 
  9.     { 
  10.     if(window.netscape) 
  11.     { 
  12.          try 
  13.    {  
  14.             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
  15.          }  
  16.          catch (e)  
  17.          {  
  18.     alert( "该操作被浏览器拒绝,如果想启用该功能,请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" );  
  19.          } 
  20.     } 
  21.     var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch); 
  22.     prefs.setCharPref('browser.startup.homepage','http://liupeng.us'); 
  23.  } 
  24. </script> 

这样是为了实现IE核心和非IE核心的兼容设置。

CSS代码:

上面不是已经看到了一个黑色填充的DIV块吗?设置成无色的话,这个层在IE下面就失效了,FF中还可行,所以才用了一种新办法,就是用透明层来实现。

  1. #flashArea{ margin:0px autowidth:800pxheight:600pxposition:relativez-index:99;} 
  2. #setArea{ height:60pxwidth:60pxbackground-color:#000positionabsolute; top:150px; left:137pxz-index:1000cursor:pointer;/*-moz-opacity:0;opacity:0;filter:alpha(opacity=0);*/

在线演示地址(点击第一个FLASH按钮)

FLASH网站开发中的团队协作

结合自己的一点理解,如果有不对的地方,请博友们指正和赐教。

apart.gif

大小: 11.27 K
尺寸: 500 x 400
浏览: 383 次
点击打开新窗口浏览全图

首先和客户谈需求的时候,一定要2个角色一起。包括视觉设计师和程序员。缺少任何一方,对客户需求的把握可能就会出现偏差,导致后续开发的难度。

网页设计师:分离客户提出的视觉需求,如类似网站,效果,配色,布局,按钮,表单。

后台开发程序员:负责提取可用的数据信息,以及程序的构架,数据库的部署。

此时,视觉设计师和后台开发程序员同时开工。

网页设计师设计完设计稿河效果图后,并制定“统一风格规范”(这点很重要),虽然能完成大部分效果图,但是网页设计师的设计图很大程度上限制了FLASH设计师的设计思路,而且有些炫酷的效果做平面效果图的时候,根本无法实现分镜效果,需要和FLASH设计师进行深度沟通。所以一定要制定”统一风格规范“,让FLASH设计师自己按照自己的创意和灵感,综合规范来完成flash引导或者loading的制作。

FLASH设计师:完成网页设计师提交过来的效果资源,并加上自己的美术创意。这个FLASH设计师仅仅完成效果,核心AS代码留给AS工程师来完成。

AS工程师:和上面的后台开发程序员沟通完毕之后,确定好数据的通信方式,例如采用xml通讯等等。

后台开发程序员:和AS程序员协作完成数据通信的调试,页面信息的呈现。

最后,我们的前端工程师出马了。完成后台开发程序员AS工程师,提交过来的动态代码,和flash,结合自己制作的HTML页面,完成最终的页面,并提交给客户。客户反馈回来的意见,直接反馈给PM或者前端工程师,然后来负责产品的细节修改(分配到人)。

可以看出来,整个流程中,设计和创意由:网页设计师和FLSAH设计师完成,数据支持由:后台开发程序员和AS工程师完成,而布局和呈现由前端开发工程师来完成。

当然这个是理想的协作模式,中途肯定会出现交叉的工作,这个就取决团队人员本身的综合素质和技术水平。

js中的window.open返回object的错误

在FLASH制作中碰到的,点击进入网站后,需要弹出一个满屏窗口(不带tpolbar)来显示整个FLASH网站。因为flash里面和网页中执行js代码是一样的,所以以网页为例。

系统中用javascript中的window.open后,页面返回了一个[object]。因为系统的原因,必需使用href="javascript:window.open()"这样的格式。所以只能通过以下办法解决。

解决window.open后返回object的错误

  1. <a href="javascript:void(window.open('','','width=200,height=200'))">window.open()</a> 

只在js的外层加上一个void不带返回参数的声明,依稀记得C语言时用过这个声明。

顺便在这里将window.open函数的参数使用也列出来:

  1. window.open函数参数列表 
  2. window = object.open([URL ][, name ][, features ][, replace]]]]) 
  3. URL:新窗口的URL地址 
  4. name:新窗口的名称,可以为空 
  5. featurse:属性控制字符串,在此控制窗口的各种属性,属性之间以逗号隔开。 
  6. fullscreen= { yes/no/1/0 } 是否全屏,默认no 
  7. channelmode= { yes/no/1/0 } 是否显示频道栏,默认no 
  8. toolbar= { yes/no/1/0 } 是否显示工具条,默认no 
  9. location= { yes/no/1/0 } 是否显示地址栏,默认no 
  10. directories = { yes/no/1/0 } 是否显示转向按钮,默认no 
  11. status= { yes/no/1/0 } 是否显示窗口状态条,默认no 
  12. menubar= { yes/no/1/0 } 是否显示菜单,默认no 
  13. scrollbars= { yes/no/1/0 } 是否显示滚动条,默认yes 
  14. resizable= { yes/no/1/0 } 是否窗口可调整大小,默认no 
  15. width=number 窗口宽度(像素单位) 
  16. height=number 窗口高度(像素单位) 
  17. top=number 窗口离屏幕顶部距离(像素单位) 
  18. left=number 窗口离屏幕左边距离(像素单位) 

FLASH执行本地文件

制作FLASH引导页后,类似于电脑随机光盘,光盘内置软件引导安装flash等...往往需要点击后安装相应的软件,也就是执行相应的程序,如WIN下面执行exe安装文件。

但是自从FLASH5以后开始提高了FLASH在本地的安全性。不允许直接执行EXE文件。那么要如何达到我们的目的呢?只要注意好以下几点就可以。

一、调用EXE文件最重要的一点,必须把你的SWF文件先转换成EXE,也就是FLASH的播放器

关于这个怎么转换,看如下图示

sp06.jpg

大小: 47.04 K
尺寸: 423 x 191
浏览: 345 次
点击打开新窗口浏览全图

FLASH里面发布swf文件之后,打开该文件 点击 文件 -> 创建播放器 就可以导出EXE版本

二、要在test.exe同一目录中新建一个文件夹,名字叫“fscommand”,你要调用的外部可执行文件要在fscommand目录下,且不能在子目录下,比如是notepad.exe,请copy notepad.exe到fscommand目录下

三、AS的代码为如下

1、调用exe,

  1. on (release) {  
  2. fscommand("exec""notepad.exe");  

(如果只执行exe,而且愿意将exe文件放在fscommand根目录下,2,3可以不看)

2.要打开其他类型的文件(chm),可以曲线救国

可以通过bat文件做中间跳转来解决其他类型文件和要执行程序目录的问题(如果对产品追求完美)

建一个批处理文件,help.bat.编辑这个文件加入start *.chm(注意中间有空格)
方法同上。将"*.exe",换成"help.bat".

3、打开本地一个目录的话(这个要求比较特殊)

我的电脑:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
我的文档:::{450D8FBA-AD25-11D0-98A8-0800361B1103}
控制面板:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}

如打开我的电脑:
加在FLASH的按钮上:
on(release){
getURL("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}");
}

现在这个问题已经解决,FLASH制作,当中遇到过不少问题,以后会慢慢的和大家分享。