1.FFmpeg视频播放器开发-FFmpeg简介与项目环境搭建(一)
2.五穷六绝七翻身?量化分析揭开背后真相(附源码)
3.OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
4.ASP页面显示时间格式
FFmpeg视频播放器开发-FFmpeg简介与项目环境搭建(一)
前言:在众多视频开发库中,源码微软的伍源DirectShow、开源库OpenCV、码网SDL以及大华和海康的源码专属库等都是不错的选择。然而,伍源FFmpeg在音视频领域具有举足轻重的码网边缘算法源码地位。众多软件如迅雷、源码腾讯视频、伍源QQ、码网微信、源码QQ音乐、伍源暴风影音、码网爱奇艺、源码优酷和格式工厂等都采用了FFmpeg技术。伍源
QQ客户端
腾讯视频
爱奇艺客户端
FFmpeg的码网流媒体视音频编解码功能十分强大,几乎涵盖了所有的视音频编码标准。因此,只要涉及到视音频开发,几乎都离不开FFmpeg。
关于FFmpeg的博客和源码讲解有很多,其中雷神的博客最为知名。本系列教程在讲解过程中也会引用到其他人的研究成果,以便我们站在巨人的肩膀上。如有不当或错误之处,请各位朋友及时指出。
本教程是在Windows下的VS + Qt环境中开发。对于Linux或Mac操作系统,部分代码可以借鉴,但环境配置会有所不同。
一、配置Windows下FFmpeg开发环境
1.1 FFmpeg下载
官网链接:ffmpeg.zeranoe.com/buil...
可以下载最新版本或以前的版本,例如4.0版本。选择4.0版本后,依次下载Static、Share、Dev三个文件。位版本的三个文件如下:
Dev文件夹下包含include和lib文件
Shared文件的Bin目录包含ffmpeg的dll
1.2 在VS中配置FFmpeg
FFmpeg在VS中的配置很简单,只需按照常规SDK配置方式操作,开发时只需包含include、lib和bin目录中的文件。例如,创建一个C++控制台程序,右键点击项目名--属性。网络验证源码出售
(1)添加头文件目录
(2)添加lib目录
(3)在附加依赖项中填写lib名称
附上各个lib的名称,方便大家粘贴。
(4)将ffmpeg bin目录下的dll文件放入生成的exe所在目录,方便使用。关于/位版本的选择,请自行决定。
二、VS和Qt的安装
本教程以Qt作为界面库进行播放器开发。Qt相对于MFC来说,学习起来更简单,并且可以跨平台,适用于Linux和Mac程序的开发。我将Qt安装在VS中,因为VS调试方便,功能强大。
如果Qt和VS都安装好了,请继续阅读下一篇博客。如果Qt没有安装好,可以参考网上的安装方法。
三、软件界面与主要功能
本地视频播放
网络拉流
菜单项
播放器的基本功能都有,如双击放大全屏、视频进度拖拽、音量调整等。其他功能将逐步更新。
源码将在第五六篇博客中上传到github。
工欲善其事,必先利其器。环境配置完成后,下一篇文章将开始FFmpeg开发之旅。
首先,恭喜您能认真阅读到这里。如果对部分内容理解不太清楚,建议将文章收藏起来,查阅相关知识点后再进行阅读,这样您会有更深的认知。如果您喜欢这篇文章,请点赞或关注我吧!!
五穷六绝七翻身?量化分析揭开背后真相(附源码)
六月悄然离去,留下了鲜绿色的回忆。七月的codepay码支付源码第一交易日即将来临,不用想,不用猜,投资群中的人们纷纷谈论着那句耳熟能详的股市谚语,相互取暖,相互打气。
这句谚语就是“五穷六绝七翻身”,虽然不能说每个人都耳熟能详,但肯定都略有耳闻。从字面上就能看出,说的是股市每逢每年的五月和六月都会出现下跌,到了七月,下跌趋势终止,开始回升走出低谷,打一个漂亮的翻身仗。
目前主流观点认为,这种说法最早起源于香港股市,在上世纪年代至年代的时候港岛特别流行,据说当时的经济研究员参考过历年香港股市的涨跌情况后,统计总结得出的结论。
类似的说法,不单单中国股市有,国外股市也存在,最著名的莫过于美国华尔街流传已久的“Sell in May”(在五月份卖出),但最早的出处却是在英国。完整的句子应该是“Sell in May and go away, come back at St.Leger's Day”,St.Leger's Day指的就是英国每年九月份在南约克郡举行的秋季赛马比赛。所以整句话翻译过来就是说,在五月份的时候大家都要卖出清仓离开,等到秋季赛马比赛后再回来。
为啥要在五月份离开呢?因为夏天到了太热了,离开伦敦去避暑,就跟清朝皇帝一到夏天就跑到承德避暑山庄消夏一样,等到秋天转凉了再屁颠屁颠跑回来。所以嘛,那群英国贵族、银行家和投资家都跑出去避暑了,清仓不玩了,那时候还没现在远程炒股的便利,股市可不就冷清没有行情嘛,等到他们九月末回来之后,行情才会有起色。后来这句话被投资者们念叨着跨过大西洋,快排源码下载带到了北美大陆,成为了如今华尔街金融人士口口相传的一句谚语。
同样都是五月卖出/下跌,一个来自于香港,一个来自于英美,那跟我国的大A行情规律吻合吗?今年大盘五月份跌了3.%,六月份跌了0.%,真的是又穷又绝,接下来的一个月我们能翻身不?
要看我国股市符不符合“五穷六绝七翻身”这个规律,靠瞎说可不行,要有数据统计结果,邓爷爷教育道“实践是检验真理的唯一标准”,我们就撸起袖子开干。
要总结规律,那数据时间范围当然越长越好,挑来挑去,觉得还是先选择“上证指数”较为合适,它在年就发布了(沪深指数还要年后才发布),基本跟上交所深交所同龄,数据长度够长,基本全覆盖了A股发展历程,更何况股民日常说的点、点什么的,指的就是上证指数的点位。
首先我们就来获取上证指数的历史行情数据,这里使用的是股票量化开源库qstock,直接使用“pip install qstock”就可以安装,基本的功能无需注册便可以使用,对新手来说非常方便,详情请见:github.com/tkfy/qsto...
在这里我们就获取了上证指数从年6月至年6月的全部月度行情数据,结合当月的收盘价和上个月的收盘价(close)就可以计算出当月的涨跌幅(pct),为了方便后续统计,我们还需要将日期索引(date,对应的是每个月的最后交易日)转换为对应的月份数值(month)。
至此,我们就获取到了年7月至年6月这年之间每个月的涨跌幅数据,这样的日期范围设置的原因是,平衡每个月份数的分布,保证每个月都出现的次数相同,都是次。
数据整理完毕后,就可以开始统计了,蠕虫病毒源码解析在这里我们要统计的是每个月的上涨次数(win_num)、下跌次数(lose_num)、胜率(win_rate)、涨跌幅的均值(pct_avg)、涨跌幅的中位数(pct_med)、涨跌幅的最小值(pct_min)和涨跌幅的最大值(pct_max)。
实现的原理是,按月份数值(month)进行循环,分月份进行统计,那每一个月份就有个涨跌幅(pct)数值,若涨跌幅为正数记为上涨,负数记为下跌,胜率(单位百分比)则为“*上涨次数/”,其余的4个指标就分别对应着这个涨跌幅数值序列当中的均值、中位数、最小值和最大值,具体细节请看下方代码。
现在统计结果就一目了然了,五月份和六月份的胜率都是五五开,年里面涨跌都是各有次,而七月份上涨次数只有次,再看涨跌幅均值,这3个月份的涨跌幅均值分别为5.%、-0.%和-0.%,而且七月份的涨跌幅均值是一年个月里面最差的,涨跌幅中位数也是。
因此结果显而易见,无论从胜率,还是涨跌幅均值/中位数,七月份都要比五月份和六月份的差,如果还要坚持说五六月份还是“五穷六绝”的话,那整句话就该改为“五穷六绝七地狱”,地狱还可能是十八层的那种。
为了降低选择代表性指数时的片面性,我们把市场上主流的那几个指数都逐个统计一遍,只要把第一段代码中的变量symbol再分别逐次修改为深证成指、上证、沪深、中证、中证、创业板指和中证全指,时间范围也做对应的调整,挨个重新run一遍,就可以统计出相应指数的月份涨跌幅数据,每次的统计结果都会保存为以指数名称为文件名后缀的Excel文件,汇总这些统计文件,就可以看到所有指数的全貌,统计结果如下所示。
主流指数所有月份胜率数据表:
主流指数所有月份涨跌幅均值数据表:
从胜率表当中看出,五六七月份的总体胜率均值分别是.2%、.%和.%,七月份并没有好于五六月份;五六七月份的总体涨跌幅均值分别是2.%、-0.%和1.%,虽然七月份翻身了一丢丢,但也没有体现出“五穷”的赶脚,综上所述,至少在主流指数概况当中,“五穷六绝七翻身”这种说法并不成立,根本站不住脚,今年的七月翻身仗,翻不翻得了基本是五五开,但从总体涨跌幅均值来看,还是“优势在我”。
论证已经完毕了,但是在过程当中还有两个有趣的发现,也可以顺便说一下,眼尖的小伙伴可能已经发现了。
第一个就是存在着“五穷六绝七翻身”的指数,它就是上证指数,它五六七月份的胜率分别是%、%和.%,涨跌幅均值是-0.%、-1.和1.%,这样一看,是不是完美契合这句谚语了。
其实吧,只要你把各种市场指数、行业指数、风格指数、概念指数和板块指数统统都统计一遍,肯定能找出不少符合这种规律的指数,只不过占比不高,并不是主流,只要林子足够大,什么鸟儿都会有。
第二个发现其实我已经在上面的表格当中标注出来了,那就是在所有月份当中,二月份的胜率和涨跌幅均值出奇的高,如果还没有感觉的话,我们把它转化为柱状图展示就直观了。
特别是看二月份的涨跌幅均值,简直就是谷子地里窜高粱——硬生生高出一大截来,并且没有一个指数的二月份涨跌幅均值出现负数,二月份的胜率均值接近%,也是没有一个指数的二月份胜率是低于%的。
如果拿枪指着我的脑袋,让我硬是选一个月份翻身,我会毫不犹豫选择二月份,谁会跟概率过不去嘛。
其实上面的这些统计研究,在量化交易或金融工程里面有一个确切的术语,叫做“日历效应”,也就是研究那些与日期存在关联的非正常收益和非正常波动的数据特征现象。
如果大家对我国股市的日历效应感兴趣,特别是想了解清楚本次统计中二月份的胜率和收益为什么这么高,背后的金融逻辑是什么,推荐大家去看国海金工今年新出的深度金工研报《日历效应背后的择时策略探究》,在里面作者列举和解释了A股中各种各样与日期节假日相关的Alpha场景,并利用其中的原理构建指数择时和行业轮动策略。
这次就先聊到这儿,噢~对了,差点忘记说,找研报不方便的小伙伴,可在公众号“量化君也”后台回复暗号“日历效应”,就可以直接保存和下载上面那篇研报,如果对你有帮助的话,可以点个充满鼓励的“赞”告诉我,让我动力满满继续肝~
我是 @quantkoala,一枚大写的量化/程序化策略源码捕手,喜欢全方位收集分享市面上主流的策略源码(股票+期货+外汇),在“量化藏经阁”和“量化藏经阁Max”社群(入口)中,持续分享量化策略源码和量化知识等干货(目前已分享+套精品策略),欢迎关注点赞&联系沟通,探讨共赢&成果共享,相互交流&共同进步!!!常在线,多交流,多沟通!!!更多相关资料请见下方文章卡片,另外还有一个持续更新的公众号“量化君也”,专注于量化策略分享/交流/社群,欢迎来玩~
OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
市场上针对终端操作系统3GPP协议开发的相关资料较为稀缺,即便在Android领域,相关学习文档也较为有限,更不用说专门的协议开发书籍了。这可能与市场需求有关,目前市场上从事前后端软件开发的人员最多,包括我自己。
鉴于我在某手机协议开发团队工作过一段时间,对协议的AP侧和CP侧开发都有所涉猎,因此我尝试基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)源码编写一些内容,旨在帮助大家了解协议开发领域,尽可能将3gpp协议内容与OpenHarmony电话子系统模块相结合进行讲解。据我所知,目前终端协议开发人才非常紧缺。首先声明,我不是协议专家,且已离开该领域五六年,如有错误,欢迎指正。
谈到终端协议开发,我首先想到的就是RIL。
CP:Communication Processor(通信处理器),通常理解为modem侧,也可以理解为底层协议,这部分由各个modem芯片厂商完成(如海思、高通)。
AP:Application Processor(应用处理器),通常指手机终端,通常理解为上层协议,主要由操作系统Telephony服务进行处理。
RIL:Radio Interface Layer(无线电接口层),通常理解为硬件抽象层,即AP侧将通信请求传给CP侧的中间层。
AT指令:AT指令是应用于终端设备与PC应用之间连接与通信的指令。
常规的Modem开发与调试可以使用AT指令进行操作,而各家的Modem芯片的AT指令都会有各自的差异。因此,手机终端厂商为了能在各种不同型号的产品中集成不同modem芯片,需要进行解耦设计来屏蔽各家AT指令的差异。
于是,OpenHarmony采用RIL对Modem进行HAL(硬件抽象),作为系统与Modem之间的通信桥梁,为AP侧提供控制Modem的接口,各Modem厂商则负责提供对应于AT命令的Vender RIL(这些一般为封装好的so库),从而实现操作系统与Modem间的解耦。
框架层:Telephony Service,电话子系统核心服务模块,主要功能是初始化RIL管理、SIM卡和搜网模块。对应OpenHarmony的源码仓库OpenHarmony/telephony_core_service。这个模块也是非常重要的一个模块,后期单独再做详细解读。
硬件抽象层:即我们要讲的RIL,对应OpenHarmony的源码仓库OpenHarmony/telephony_ril_adapter。RIL Adapter模块主要包括厂商库加载,业务接口实现以及事件调度管理。主要用于屏蔽不同modem厂商硬件差异,为上层提供统一的接口,通过注册HDF服务与上层接口通讯。
芯片层:Modem芯片相关代码,即CP侧,这些代码各个Modem厂商是不开放的,不出现在OpenHarmony中。
硬件抽象层又被划分为hril_hdf层、hril层和venderlib层。
hril_hdf层:HDF服务,基于OpenHarmony HDF框架,提供hril层与Telephony Service层进行通讯。
hril层:hril层的各个业务模块接口实现,比如通话、短彩信、数据业务等。
vendorlib层:各Modem厂商提供的对应于AT命令库,各个厂商可以出于代码闭源政策,在这里以so库形式提供。目前源码仓中已经提供了一套提供代码的AT命令操作,至于这个是针对哪个型号modem芯片的,我后续了解清楚再补充。
下面是ril_adapter仓的源码结构:
本文解读RIL层很小一部分代码,RIL是如何通过HDF与Telephony连接上的,以后更加完整的逻辑梳理会配上时序图讲解,会更加清晰。首先,我们要对OpenHarmony的HDF(Hardware Driver Foundation)驱动框架做一定了解,最好是动手写一个Demo案例,具体的可以单独去官网查阅HDF资料。
首先,找到hril_hdf.c文件的代码,它承担的是驱动业务部分,源码中是不带中文注释的,为了梳理清楚流程,我给源码关键部分加上了中文注释。
上述代码中配置了对应该驱动的moduleName为"hril_hdf",因此我们需要去找到对应驱动的配置文件,以HiDV开发板为例,它的驱动配置在vendor_hisilicon/HiDV/hdf_config/uhdf/device_info.hcs代码中可以找到,如下:
这里可以发现该驱动对应的服务名称为cellular_radio1,那么telephony_core_service通过HDF与RIL进行通信肯定会调用到该服务名称,因此无查找telephony_core_service的相关代码,可以很快定位到telephony_core_service/services/tel_ril/src/tel_ril_manager.cpp该代码,该代码中有一个关键类TelRilManager,它用来负责管理tel_ril。
看tel_ril_manager.cpp中的一个关键函数ConnectRilAdapterService,它就是用来通过HDF框架获取RIL_ADAPTER的服务,之前定义过RIL_ADAPTER_SERVICE_NAME常量为"cellular_radio1",它就是在vendor_hisilicon/XXXX/hdf_config/uhdf/device_info.hcs中配置的hril_hdf驱动对应的服务名称。
ASP页面显示时间格式
如果只是在asp页面显示的话,根本就不用asp代码,java代码完全可以解决~
你用百度搜索关键字 网页特效代码 就可以了~一般会有个关于时间的分类~里边有各种各样的时间代码,将代码直接嵌入网页源代码中就可以了~一般都是JavaScript写成的~
比如:
<script>setInterval("linkweb.innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",);
</script>
或者:
<SCRIPT language=JavaScript>
//clock
dCol='';//date colour.
fCol='FF';//face colour.
sCol='';//seconds colour.
mCol='';//minutes colour.
hCol='';//hours colour.
ClockHeight=;
ClockWidth=;
ClockFromMouseY=0;
ClockFromMouseX=;
//Alter nothing below! Alignments will be lost!
d=new Array("SUNDAY","MONDAY","TUESDAY","WEDNSEDAY","THURSDAY","FRIDAY","SATURDAY");
m=new Array("JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER");
date=new Date();
day=date.getDate();
year=date.getYear();
if (year < ) year=year+;
TodaysDate=" "+d[date.getDay()]+" "+day+" "+m[date.getMonth()]+" "+year;
D=TodaysDate.split('');
H='...';
H=H.split('');
M='....';
M=M.split('');
S='.....';
S=S.split('');
Face='1 2 3 4 5 6 7 8 9 ';
font='Arial';
size=1;
speed=0.6;
ns=(document.layers);
ie=(document.all);
Face=Face.split(' ');
n=Face.length;
a=size*;
//ymouse=0;
//xmouse=0;
ymouse=;
xmouse=;
scrll=0;
props="<font face="+font+" size="+size+" color="+fCol+"><B>";
props2="<font face="+font+" size="+size+" color="+dCol+"><B>";
Split=/n;
Dsplit=/D.length;
HandHeight=ClockHeight/4.5
HandWidth=ClockWidth/4.5
HandY=-7;
HandX=-2.5;
scrll=0;
step=0.;
currStep=0;
y=new Array();x=new Array();Y=new Array();X=new Array();
for (i=0; i < n; i++){ y[i]=0;x[i]=0;Y[i]=0;X[i]=0}
Dy=new Array();Dx=new Array();DY=new Array();DX=new Array();
for (i=0; i < D.length; i++){ Dy[i]=0;Dx[i]=0;DY[i]=0;DX[i]=0}
if (ns){
for (i=0; i < D.length; i++)
document.write('<layer name="nsDate'+i+'" top=0 left=0 height='+a+' width='+a+'><center>'+props2+D[i]+'</font></center></layer>');
for (i=0; i < n; i++)
document.write('<layer name="nsFace'+i+'" top=0 left=0 height='+a+' width='+a+'><center>'+props+Face[i]+'</font></center></layer>');
for (i=0; i < S.length; i++)
document.write('<layer name=nsSeconds'+i+' top=0 left=0 width= height=><font face=Arial size=3 color='+sCol+'><center><b>'+S[i]+'</b></center></font></layer>');
for (i=0; i < M.length; i++)
document.write('<layer name=nsMinutes'+i+' top=0 left=0 width= height=><font face=Arial size=3 color='+mCol+'><center><b>'+M[i]+'</b></center></font></layer>');
for (i=0; i < H.length; i++)
document.write('<layer name=nsHours'+i+' top=0 left=0 width= height=><font face=Arial size=3 color='+hCol+'><center><b>'+H[i]+'</b></center></font></layer>');
}
if (ie){
document.write('<div id="Od" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < D.length; i++)
document.write('<div id="ieDate" style="position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center">'+props2+D[i]+'</B></font></div>');
document.write('</div></div>');
document.write('<div id="Of" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < n; i++)
document.write('<div id="ieFace" style="position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center">'+props+Face[i]+'</B></font></div>');
document.write('</div></div>');
document.write('<div id="Oh" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < H.length; i++)
document.write('<div id="ieHours" style="position:absolute;width:px;height:px;font-family:Arial;font-size:px;color:'+hCol+';text-align:center;font-weight:bold">'+H[i]+'</div>');
document.write('</div></div>');
document.write('<div id="Om" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < M.length; i++)
document.write('<div id="ieMinutes" style="position:absolute;width:px;height:px;font-family:Arial;font-size:px;color:'+mCol+';text-align:center;font-weight:bold">'+M[i]+'</div>');
document.write('</div></div>')
document.write('<div id="Os" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < S.length; i++)
document.write('<div id="ieSeconds" style="position:absolute;width:px;height:px;font-family:Arial;font-size:px;color:'+sCol+';text-align:center;font-weight:bold">'+S[i]+'</div>');
document.write('</div></div>')
}
// (ns)?window.captureEvents(Event.MOUSEMOVE):0;
//function Mouse(evnt){
// ymouse = (ns)?evnt.pageY+ClockFromMouseY-(window.pageYOffset):event.y+ClockFromMouseY;
// xmouse = (ns)?evnt.pageX+ClockFromMouseX:event.x+ClockFromMouseX;
//}
//(ns)?window.onMouseMove=Mouse:document.onmousemove=Mouse;
function ClockAndAssign(){
time = new Date ();
secs = time.getSeconds();
sec = -1. + Math.PI * secs/;
mins = time.getMinutes();
min = -1. + Math.PI * mins/;
hr = time.getHours();
hrs = -1. + Math.PI * hr/6+Math.PI*parseInt(time.getMinutes())/;
if (ie){
Od.style.top=window.document.body.scrollTop;
Of.style.top=window.document.body.scrollTop;
Oh.style.top=window.document.body.scrollTop;
Om.style.top=window.document.body.scrollTop;
Os.style.top=window.document.body.scrollTop;
}
for (i=0; i < n; i++){
var F=(ns)?document.layers['nsFace'+i]:ieFace[i].style;
F.top=y[i] + ClockHeight*Math.sin(-1. + i*Split*Math.PI/)+scrll;
F.left=x[i] + ClockWidth*Math.cos(-1. + i*Split*Math.PI/);
}
for (i=0; i < H.length; i++){
var HL=(ns)?document.layers['nsHours'+i]:ieHours[i].style;
HL.top=y[i]+HandY+(i*HandHeight)*Math.sin(hrs)+scrll;
HL.left=x[i]+HandX+(i*HandWidth)*Math.cos(hrs);
}
for (i=0; i < M.length; i++){
var ML=(ns)?document.layers['nsMinutes'+i]:ieMinutes[i].style;
ML.top=y[i]+HandY+(i*HandHeight)*Math.sin(min)+scrll;
ML.left=x[i]+HandX+(i*HandWidth)*Math.cos(min);
}
for (i=0; i < S.length; i++){
var SL=(ns)?document.layers['nsSeconds'+i]:ieSeconds[i].style;
SL.top=y[i]+HandY+(i*HandHeight)*Math.sin(sec)+scrll;
SL.left=x[i]+HandX+(i*HandWidth)*Math.cos(sec);
}
for (i=0; i < D.length; i++){
var DL=(ns)?document.layers['nsDate'+i]:ieDate[i].style;
DL.top=Dy[i] + ClockHeight*1.5*Math.sin(currStep+i*Dsplit*Math.PI/)+scrll;
DL.left=Dx[i] + ClockWidth*1.5*Math.cos(currStep+i*Dsplit*Math.PI/);
}
currStep-=step;
}
function Delay(){
scrll=(ns)?window.pageYOffset:0;
Dy[0]=Math.round(DY[0]+=((ymouse)-DY[0])*speed);
Dx[0]=Math.round(DX[0]+=((xmouse)-DX[0])*speed);
for (i=1; i < D.length; i++){
Dy[i]=Math.round(DY[i]+=(Dy[i-1]-DY[i])*speed);
Dx[i]=Math.round(DX[i]+=(Dx[i-1]-DX[i])*speed);
}
y[0]=Math.round(Y[0]+=((ymouse)-Y[0])*speed);
x[0]=Math.round(X[0]+=((xmouse)-X[0])*speed);
for (i=1; i < n; i++){
y[i]=Math.round(Y[i]+=(y[i-1]-Y[i])*speed);
x[i]=Math.round(X[i]+=(x[i-1]-X[i])*speed);
}
ClockAndAssign();
setTimeout('Delay()',);
}
if (ns||ie)window.onload=Delay;
</SCRIPT>
这只是其中的两个例子~这样的例子还有很多~
我用百度搜索出来的第一个网站就提供了很丰富的特效代码~