上篇说了动态创建结点和删除结点的例子,这一篇说一些如何用setInterval和setTimeout做简单的动画。
语法皆是window.setTimeout(fn, delay), window.setInterval(fn, delay)
fn可以是一个函数名,也可以是一个执行的字符串,但要注意的是,如果fn是一个可以执行的字符串,且有参数,如window.setInterval("myFunction(obj)",1000)将可能抛出一个异常,这个时候,通常是你要传递一个对象参数,我建议用这样的一个办法来解决,也建议使用这种方法来使用window.setTimeout和window.setInterval:
window.setInterval(function (){
myFunction(obj);},1000);
还有一种情况就是在一个"class"里,即要执行this.myFunction(obj)如何实现呢?
function jsclass() {};
jsclass.prototype.init = function (obj) {
var self = this; //创建一个this指针的引用
window.setInterval(function(obj) {
self.myFunction(obj);},1000);
};
jsclass.prototype.myFunction = function (obj) {
//TODO
};
DHTML的全局方法setInterval和setTimeout,所谓全局,即在window层,不属于DHTML的DOM元素的方法里,这两个有一些区别,网上也有很多说明,也就是setInterval是循环执行一个指定函数,setTimeout是只执行一次。例外说明一点,属于window层次的,可以在前面不加window,即可以用window.setInterval也可以直接用setInterval。
它们都返回一个数字型的timerId,用于cleaverInterval/clearTimeout方法,从setInterval/setTimeout中返回。如果做过桌面应用的朋友,可以把这个setInterval和setTimeout假想成创建一个线程,而timerId则是一个线程Id,而cleaverInterval/clearTimeout方法则是消毁这个线程。也许这样可以更好的理解这两个方法。
(在具体的应用中,我更驱向于用setTimeout。)
知道这两个方法的功能,先来写一个简单的例子:
一个一秒后弹出的alert对话框。
<script>
window.setTimeout(function () {
alert("timeout example after 1 second");
},1000)
</script>
每一秒创建一个新DIV结点的函数
<script>
function intervalExample() {
var div=document.createElement("div");
div.innerHTML = "tutorial of DHTML and javascript programming, by www.never-online.net";
document.body.appendChild(div);
}
window.setInterval(intervalExample,1000);
</script>
而实际应用中,setTimeout可以有一个另类一些的应用,比如相当于VB中的DoEvents函数,或者.net桌面程序中Application.DoEvents();这样的功能,也就是异步处理,因为DHTML没有多线程,所以说这个功能在很多的时候是为了给用户觉得不是在假死状态,或者给其它的程序按照代码的逻辑继续执行下去而不会阻塞或者也不会跳过一段代码执行。
举个例子。
下段代码是没有加setTimeout的。运行后,锚点会马上指向hash2
<script>
window.location.hash="hash1";
window.location.hash="hash2";
</script>
这一段是加了setTimeout的,锚点会在3秒后指向hash1,再在3秒后指向hash2
<script>
var doEventsDelay = 0;
function DoEvents (fn) {
window.setTimeout(fn,doEventsDelay);
doEventsDelay+=3000;
}
DoEvents(function () {
window.location.hash="hash1";
doEventsDelay-=3000;
}
);
DoEvents(function () {
window.location.hash="hash2";
doEventsDelay-=3000;
}
);
</script>
下面我们做一个实用些的例子,比如一个动态显示tip的动态菜单。
一、这里只讲解setTimeout的方法,setInterval的请看demo里的代码,还要注明一点(本例中有一个比较严重的问题是没有解决的,这一问题我将留到以后再讲解)是关于坐标的。比如将下面代码中的sliderShow放到一个table中,就可能会发现一些问题了。:D
思路,得到一个元素,相对这个元素的作标,再根据一个tip的容器从而做一个动画,
主要用到的就是相对元素的X,Y坐标,关于坐标的一些属性意义,参见下图:
而整个动画的思路,见下图
注释代码:
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]是否觉得上面的例子很多都是重复的劳动?如果减少一些岂不更好?:D,的确如此,上面的JS代码有近一半都是重复的,在这里我就不把它优化了,还是留给大家做一些实质性的工作,减少上面代码的冗余。
语法皆是window.setTimeout(fn, delay), window.setInterval(fn, delay)
fn可以是一个函数名,也可以是一个执行的字符串,但要注意的是,如果fn是一个可以执行的字符串,且有参数,如window.setInterval("myFunction(obj)",1000)将可能抛出一个异常,这个时候,通常是你要传递一个对象参数,我建议用这样的一个办法来解决,也建议使用这种方法来使用window.setTimeout和window.setInterval:
window.setInterval(function (){
myFunction(obj);},1000);
还有一种情况就是在一个"class"里,即要执行this.myFunction(obj)如何实现呢?
function jsclass() {};
jsclass.prototype.init = function (obj) {
var self = this; //创建一个this指针的引用
window.setInterval(function(obj) {
self.myFunction(obj);},1000);
};
jsclass.prototype.myFunction = function (obj) {
//TODO
};
DHTML的全局方法setInterval和setTimeout,所谓全局,即在window层,不属于DHTML的DOM元素的方法里,这两个有一些区别,网上也有很多说明,也就是setInterval是循环执行一个指定函数,setTimeout是只执行一次。例外说明一点,属于window层次的,可以在前面不加window,即可以用window.setInterval也可以直接用setInterval。
它们都返回一个数字型的timerId,用于cleaverInterval/clearTimeout方法,从setInterval/setTimeout中返回。如果做过桌面应用的朋友,可以把这个setInterval和setTimeout假想成创建一个线程,而timerId则是一个线程Id,而cleaverInterval/clearTimeout方法则是消毁这个线程。也许这样可以更好的理解这两个方法。
(在具体的应用中,我更驱向于用setTimeout。)
知道这两个方法的功能,先来写一个简单的例子:
一个一秒后弹出的alert对话框。
<script>
window.setTimeout(function () {
alert("timeout example after 1 second");
},1000)
</script>
每一秒创建一个新DIV结点的函数
<script>
function intervalExample() {
var div=document.createElement("div");
div.innerHTML = "tutorial of DHTML and javascript programming, by www.never-online.net";
document.body.appendChild(div);
}
window.setInterval(intervalExample,1000);
</script>
而实际应用中,setTimeout可以有一个另类一些的应用,比如相当于VB中的DoEvents函数,或者.net桌面程序中Application.DoEvents();这样的功能,也就是异步处理,因为DHTML没有多线程,所以说这个功能在很多的时候是为了给用户觉得不是在假死状态,或者给其它的程序按照代码的逻辑继续执行下去而不会阻塞或者也不会跳过一段代码执行。
举个例子。
下段代码是没有加setTimeout的。运行后,锚点会马上指向hash2
<script>
window.location.hash="hash1";
window.location.hash="hash2";
</script>
这一段是加了setTimeout的,锚点会在3秒后指向hash1,再在3秒后指向hash2
<script>
var doEventsDelay = 0;
function DoEvents (fn) {
window.setTimeout(fn,doEventsDelay);
doEventsDelay+=3000;
}
DoEvents(function () {
window.location.hash="hash1";
doEventsDelay-=3000;
}
);
DoEvents(function () {
window.location.hash="hash2";
doEventsDelay-=3000;
}
);
</script>
下面我们做一个实用些的例子,比如一个动态显示tip的动态菜单。
一、这里只讲解setTimeout的方法,setInterval的请看demo里的代码,还要注明一点(本例中有一个比较严重的问题是没有解决的,这一问题我将留到以后再讲解)是关于坐标的。比如将下面代码中的sliderShow放到一个table中,就可能会发现一些问题了。:D
思路,得到一个元素,相对这个元素的作标,再根据一个tip的容器从而做一个动画,
主要用到的就是相对元素的X,Y坐标,关于坐标的一些属性意义,参见下图:
而整个动画的思路,见下图
注释代码:
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]是否觉得上面的例子很多都是重复的劳动?如果减少一些岂不更好?:D,的确如此,上面的JS代码有近一半都是重复的,在这里我就不把它优化了,还是留给大家做一些实质性的工作,减少上面代码的冗余。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月30日
2024年11月30日
- 黄乙玲1993-受伤的心·冷暖人生[台湾首版][WAV+CUE]
- (G)I-DLE《I SWAY》[FLAC/分轨][150.46MB]
- FTISLAND《Serious》[320K/MP3][82.33MB]
- FTISLAND《Serious》[FLAC/分轨][476.5MB]
- 曾庆瑜1988-你听一听[清优][WAV+CUE]
- Bach,Vieuxtemps,Gruenberg-ViolinConcertos-Heifetz(2012)FLAC
- ConcertoScirocco-SirensSoldiers.SongswithoutWordsfromtheItalianSeicento(2024)[24
- NCT 127《WALK - The 6th Album》[320K/MP3][76.57MB]
- NCT 127《WALK - The 6th Album》[FLAC/分轨][432.81MB]
- Weeekly《Bliss》[320K/MP3][36.2MB]
- TIS《三国志V》原音母盘[24-96][WAV+分轨]
- 林翠萍.1988-绵绵细雨的夜晚【艺歌】【WAV+CUE】
- 张帝《成名经典歌曲》【WAV】
- Weeekly《Bliss》[FLAC/分轨][215.35MB]
- 群星《当打之年》 HQII[WAV+CUE][640M]