最近一个项目在使用jquery tools在用Flashembed组件的时候,发现了sIFR这个东西,就顺便了解了一下。
一、什么是sIFR?
sIFR表示scalable Inman Flash Replacement,是一种在web上准确发布自定义排版的技术。这种技术的实现方法是,当页面下载时,在一个指定的元素中用Flash渲染的文字来代替一些文本。理解下面这点是很重要的,这个元素并不是被Flash完全替换,文本仍在元素内,这个元素仍可以像通常那样被样式化或者被定位。
二、如何使用sIFR?
sIFR的用法很简单,首先在官方http://www.mikeindustries.com/blog/sifr/下载最新的sIFR版本。然后在页面中引用相关的js(sifr.js和sifr-addons.js,如果用jquery tools则不需要加载这两个js),最后通过js方法将指定选择器按指定的样式来调用即可。具体可以看官方demo和jquery tools上的介绍。
三、最遗憾的,sIFR的局限
讲了这么多,你可能已经心动了吧,我当初了解了以后也是,这个在制作一些企业网站的时候是很有用的,不过最大的问题,目前sIFR不支持中文,主要原因是中文字库太大。不过我想如果能自己做一个只有一个企业站常用字的字库是否可行呢?不过这个还涉及到了字库的制作,不是更麻烦了?还是老老实实用图片先吧,也许在不久的将来随着带宽的提高技术的进步会有更多更好的方案出来,现在还是忍忍吧!
最后羡慕下国外的同行吧!
想了解更多的同志可以去看看:
如何以及何时使用sIFR
sIFR网页字体替换技术
sIFR 2.0: Rich Accessible Typography for the Masses
在网页设计中经常由于客户的种种需求,而需要DIV层和FLASH的交互,但是往往DIV都被FLASH遮盖住了。
过去参与的一个项目:http://www.digitalwuhan.gov.cn/index.html(该网站问题多多就不说了,各位就不用批网站的问题了,现在只讨论本论题。)
顶部的flash就涉及此问题,具体是怎么解决的呢?因为今天看到有人提出此问题,就把解决方案拿出来分析一下。
先看该网站的FLASH加载代码:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" name="red1" width="1003" height="218" align="middle" id="red1">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="images/top_blue.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<param name="bgcolor" value="#ffffff" />
<embed src="images/top_blue.swf" quality="high" wmode="transparent" bgcolor="#ffffff" width="1003" height="218" name="red1" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
主要起作用的就是用红色和绿色标注的这两句,其中红色的<param name="wmode" value="transparent" />这句主要用于IE下的效果实现,绿色的wmode="transparent"则是Firefox下效果实现的代码。
附加资料:
关于wmode属性资料:
(可选)允许使用 Internet Explorer 4.0 中的透明 Flash 内容、绝对定位和分层显示功能。此标记/属性仅在带有 Flash Player ActiveX 控件的 Windows 中有效。
"Window"在 Web 页上用影片自己的矩形窗口来播放应用程序。"Window"表明此 Flash 应用程序与 HTML 层没有任何交互,并且始终位于最顶层。
"Opaque" 使应用程序隐藏页面上位于它后面的所有内容。
"Transparent"使 HTML 页的背景可以透过应用程序的所有透明部分显示出来,并且可能会降低动画性能。
"Opaque windowless"和"Transparent windowless"都可与 HTML 层交互,从而允许 SWF 文件上方的层遮蔽应用程序。这两种选项之间的差异在于"Transparent"允许透明,因此,如果 SWF 文件的某一部分是透明的,则 SWF 文件下方的 HTML 层可以透过该部分显示出来,而"opaque"则不会显示。
如果忽略此属性,默认值为 Window。仅适用于 object。
最后更新:2009-2-16
在舞台新建一个影片剪辑,实例名为line,样子就随便画个长条
onEnterFrame 在FLASH 帮助文件中的说明
onEnterFrame(MovieClip.onEnterFrame 处理函数) onEnterFrame = function() {} 以 SWF 文件的帧频重复调用。分配给 onEnterFrame 事件处理函数的函数将在附加到受影响的帧上的所有 ActionScript 代码之前处理。 必须定义一个在调用事件处理函数时执行的函数。您可以在时间轴上定义该函数,也可以在扩展 MovieClip 类或链接到库中的元件的类文件中定义该函数。 一旦满足阻止 Flash Player 调用已定义函数的条件,将 onEnterFrame 事件处理函数的值设置为 null。 可用性:ActionScript 1.0、Flash Player 6 示例下面的示例为 onEnterFrame 事件处理函数定义一个函数,该函数将 trace() 动作发送到"输出"面板: my_mc.onEnterFrame = function () { trace("onEnterFrame called"); }
个人理解onEnterFrame的作用就是逐帧执行函数中的代码,以上范例就是逐帧增加this.line._width的值达到动画效果
function copybtn() { //此函数用来生成按钮 nums = 10;//复制的个数 for (var j = 1; j<=nums; j++) { //复制库里的mc,并将其置于舞台上,分配好各自的坐标 _root.attachMovie("round", "abc"+j+"_mc", 100+j); _root["abc"+j+"_mc"]._x = 19.5+30*(j-1); _root["abc"+j+"_mc"]._y = 186.5; } }
_root.attachMovie("round", "abc"+j+"_mc", 100+j); 这句是重点,三个参数分别为 round 库里面的元件的标示符,在库中选择元件,右键点击选择链接,按如下图设置
"abc"+j+"_mc" 这个是置于舞台后的实例名 100+j 这个是置于舞台后的深度,数字大的上面
实现这个效果真是一波三折,花了一天多实现在研究清楚
实现代码如下:
研究中出现的问题:
一、强制转换数据类型
a=String(b);
可以把b的类型转换成字符串赋予a
二、查看变量类型
trace(typeof(a));
可查看a的变量类型
var ad = "ad/1.swf"; container._lockroot = true; var my_mcl = new MovieClipLoader(); my_mcl.loadClip(_root.ad, _root.container);
说明:
ad为定义外部flash地址
container._lockroot = true;
flash的帮助文件中介绍如下:
一个布尔值,指定将 SWF 文件加载到影片剪辑中时 _root 引用的内容。默认情况下,_lockroot 属性为 undefined。您可以在正在被加载的 SWF 文件中或正在加载该影片剪辑的处理函数中设置此属性。
例如,假设您有一个名为 Games.fla 的文档,用于让用户选择要玩的游戏并将该游戏(例如 Chess.swf)加载到 game_mc 影片剪辑中。请确保,在加载到 Games.swf 中之后,在 Chess.swf 中对 _root 的任何使用都指向 Chess.swf 中的 _root(而非 Games.swf 中的 _root)。如果对 Chess.fla 具有访问权限并将其发布到 Flash Player 7 或更高版本,则可以将此语句添加到 Chess.fla 的主时间轴上
my_mcl.loadClip(_root.ad, _root.container);中前面是flash地址,后面是想要在哪里调用。
源码下载:flash外部调用.rar
最近评论