对联广告中左右两边内容呼应是一种很好的创意形式,但是由于网络延时等原因,使得左右两边的内容很难按照我们的意愿保持同步呈现。
我在这里给出一种方法,思路是用LocalConnection对象来实现两个文件的同步播放。
这里是一个例子(请用IE测试)。
假设对联广告的两个文件分别叫left和right,那么我们先在left的第一帧加入以下代码:
var l_lc = new LocalConnection();
l_lc.connect("roewe_connection");
l_lc.syn = function(n) {
_root.gotoAndStop(n);
};
stop();这个文件是不会自动播放的,只有等接收到来来自LocalConnection对象指令的时候才会开始执行同步,也就是syn函数。
然后在right的第一帧加入以下代码:
var r_lc = new LocalConnection();
onEnterFrame = function () {
r_lc.send("roewe_connection","syn",this._currentframe);
};
r_lc.onStatus = function(infoObject) {
switch (infoObject.level) {
case 'status' :
onEnterFrame = loop;
delete r_lc.onStatus;
break;
case 'error' :
break;
}
};
function loop() {
if (_currentframe == _totalframes) {
gotoAndStop(2);
} else {
nextFrame();
}
r_lc.send("roewe_connection","syn",this._currentframe);
}
stop();这个文件也不会自动播放,而是先循环发出连接指令。一旦侦测到连接成功,也就是left文件被加载,就开始循环执行loop函数。
loop函数负责自身的播放,同时对left文件发送同步请求。
在本地测试的时候,无论先打开left还是right,同步都是正常的。但是在网络环境下,有个传输的延时问题。在上例中,两个文件的大小差不多,在html代码中嵌入的顺序中是先left后right,理论上应该是left比right先加载完毕。所以驱动同步的代码放在后加载的right文件中。
而保险的做法是必须先保证两个文件都加载完毕。
ps.顺便bs一下sina的对联代码,竟然不支持IE以外的浏览器,真是够阳春。













LocalConnection有bug,当多个swf都被启动,比如,开了多个载有对联的swf,这时候一个连接就存在问题了,需要多对连接来甄别,在不能动js的情况下,我用判断本地时间方式来做左右同步…