对联广告中左右两边内容呼应是一种很好的创意形式,但是由于网络延时等原因,使得左右两边的内容很难按照我们的意愿保持同步呈现。

我在这里给出一种方法,思路是用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以外的浏览器,真是够阳春。

« »