效果演示

 

这个效果的制作是借助setTimeout的第三个参数。setTimeout/setInterval,这两个函数相信前端开发同学都很熟悉。它们在非IE(6-9)浏览器中还可以如下使用:

1 setTimeout(function(obj){
2     alert(obj.a);
3 }, 2000, {a:1});

即传了第三个参数,第三个参数将作为回调函数的参数obj传入。在非IE浏览器中都弹出了1。这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去。

1 setTimeout(function(obj){
2     obj.method();
3 }, 2000, obj);

上次看到一个setTimeout的一个用法:

1 var arr = [1,9,2,8,3,7,4,6,4,5];
2 for(var i = 0, len = arr.length; i < len; i++){
3     setTimeout(function(x){
4         console.log(x);
5     },arr[i],arr[i]);
6 }

虽然这个并不是什么好的用法,这里setTimeout的第三个参数主要得到了除IE外的系列浏览器的支持。

要让IE支持的话,可以按下面方法进行扩展:

01 (function(w){
02     //ie传入第三个参数
03     if(!+[1,]){//除IE外,!+[1,]都是返回false
04         (function(overrideFn){
05             w.setTimeout = overrideFn(w.setTimeout);
06             w.setInterval = overrideFn(w.setInterval);
07         })(function(originalFn){
08             return function(code,delay){
09                 var args = Array.prototype.slice.call(arguments,2);
10                 return originalFn(function(){
11                     if(typeof code == 'string'){
12                         eval(code);
13                     }else{
14                         code.apply(this,args);
15                     }
16                 },delay);
17             }
18         })
19     }
20 })(window)

如果有第三个参数,某些情况下的调用就可以方便的处理回调函数中当前对象的问题,写起来好看点。扩展一下Function,增加一个延时调用(参考而已):

01 function.prototype.delay = function(){
02     var args = Array.prototype.slice.call(arguments,0);
03     setTimeout(function(fn){
04         fn.apply('',args.slice(1));
05     },args[0],this);
06 }
07 var fn = function(x){
08     alert(x)
09 };
10 fn.delay(1000,'xesam');

下面是模拟进度条的代码:

01 <script type="text/javascript">
02     function Load(id,width){
03         this.ele = document.getElementById(id);
04         this.indicator = document.createElement('div');
05         this.width = (width > 0 && width) || 300;
06         this.init();
07     }
08     Load.prototype = {
09         constructor:Load,
10         init:function(){
11             this.ele.style.width = this.width + 'px';
12             this.ele.appendChild(this.indicator);
13             var iStyle = this.indicator.style;
14             iStyle.width = 0;
15             iStyle.height = '100%';
16             iStyle.background = '#ff5500';
17         },
18         start:function(){
19             //this.init();
20             this.loading();
21         },
22         loading:function(){
23             this.timer = setTimeout(function(obj){
24                 var t = obj.indicator.data || 0;
25                 if(t < obj.width){
26                     obj.indicator.style.width = t + 1 +'px';
27                     obj.indicator.data = t + 1;
28                     obj.loading();
29                 }else{
30                     clearInterval(obj.timer);
31                 }
32             },10,this);
33         },
34         stop:function(){
35             clearTimeout(this.timer);
36         }
37     }
38     var load_1 = new Load('loading',300);
39     load_1.start();
40 </script>

JavaScript滚动条的制作的更多相关文章

  1. 利用javascript:void(0)制作假的提交按钮替代button

    在写html页面,我们很自然的在表单提交的地方采用button来作为提交按钮,但是,用<button type=”button”>按钮</button>作为提交代码会有个问题, ...

  2. JavaScript滚动条插件源码

    这是过年的时候自己写的js滚动条插件的源码,做出的效果自己并不满意,正因为做的并不满意所以回头重新巩固和深入学习js,这个插件有如下几个不太满意的地方: 内容的过度效果,可以参阅QQ客户端最近会话列表 ...

  3. Odometer使用JavaScript和CSS制作数字滑动效果

    Odometer是一个使用JavaScript和CSS技术,制作出数字上下滑动的动画效果插件,有点类似与我们的天然气的读数的动画效果,这个插件是轻量级的,压缩版本只有3kg,使用CSS3动画技术,所以 ...

  4. selenium - javascript - 滚动条

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法.在这种情况下,就可以借助JavaScript来控制浏览器的滚动条.WebDriver提供了execu ...

  5. 使用javaScript和JQuery制作经典面试题:光棒效果

    使用javaScript与jQuery添加CSS样式的区别和步骤 使用javaScript制作光棒效果 --首先是javaScript <script> $(function () { v ...

  6. javascript插件制作学习-制作步骤

    原生JavaScript插件开发学习 自己制作的demo大家可以看下https://www.cnblogs.com/zimengxiyu/p/9814889.html 插件制作步骤: (一)构造函数 ...

  7. javascript滚动条之ScrollBar.js

    ScrollBar.js是一个仅仅120行的滚动条JS插件,使用非常方便 详情阅读:https://git.oschina.net/wuquanyao/scrollbar.js/*========== ...

  8. javascript中setInterval制作跑马灯的效果

    html代码: javascript代码 <script type="text/javascript"> function scroll() { var title = ...

  9. javascript简易日历制作

    学习记录 01.练习数组的用法 02.理解this.index的用法 03.绑定事件深入练习理解 html代码 <div id="date"> <ul id=&q ...

随机推荐

  1. 213. String Compression【LintCode java】

    Description Implement a method to perform basic string compression using the counts of repeated char ...

  2. 【token接口】-jmeter

    token 接口 3步骤 1.登录接口 2.提取登录接口的token 3.http 信息管理头   把提取的cookie传入  就可以了

  3. appcrawler遍历工具常用方法

    Usage: appcrawler [options] -a, --app <value> Android或者iOS的文件地址, 可以是网络地址, 赋值给appium的app选项 -c,  ...

  4. HPUX 11.31 MC/SG恢复丢失的锁盘

    有时候由于一些特殊的原因,用户的cluster中的锁盘信息丢失,或者需要更换锁盘,只要执行一个命令就可以了. #cmdisklock reset /dev/vglock:/dev/disk/diskX ...

  5. NMAP-端口扫描

    1.时序选项 -T0 -> -T5 速度变快,但是准确性下降,nmap默认是T3 2.指定端口 3.扫描指定TCP和UDP端口 4.快速扫描常见100个端口 5.扫描常见的n的端口 6.TCP ...

  6. Web后台任务处理

    文章:.NET Core开源组件:后台任务利器之Hangfire Hangfire官网介绍:在.NET和.NET Core应用程序中执行后台处理的简便方法.无需Windows服务或单独的过程. 以持久 ...

  7. [codecademy]html&css

    1. HTML is the language used to create the web pages you visit everyday. It provides a logical way t ...

  8. lintcode-158-两个字符串是变位词

    158-两个字符串是变位词 写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 说明 What is Anagram? Two strings are ...

  9. thrift多平台安装

    thrift支持多语言的RPC,一直都想深入学习了解thrift,最近有空,就上网查了些资料,学习了一下,对它的使用有了一些了解.本篇是写thrift的安装,使用方法会另起一篇来写. 本文使用thri ...

  10. 结对作业二——WordCount进阶版

    软工作业三 要求地址 作业要求地址 结对码云项目地址 结对伙伴:秦玉 博客地址 PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟) Planning 计划 10 7 · ...