效果演示

 

这个效果的制作是借助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. Linux命令应用大词典-第33章 X Window

    33.1 xhost:X服务器的访问控制程序 33.2 xinit:X Window系统初始化 33.3 Xlsclients:在显示器中列出正在运行的客户端应用程序 33.4 xlsfonts:显示 ...

  2. Java初始化方法:类、容器

    Java初始化方法:类.容器   初始化类(非final): Struts2的DefaultActionMapper类中:      public DefaultActionMapper() {   ...

  3. HashMap 阅读

    最近研究了一下java中比较常见的map类型,主要有HashMap,HashTable,LinkedHashMap和concurrentHashMap.这几种map有各自的特性和适用场景.使用方法的话 ...

  4. 从零开始的Python学习Episode 2——运算符与while循环

    一.算术运算符 加法:+,减法:-,乘法*,除法/,整除(地板除)//,取余%,乘方**.  二.逻辑运算符 且:and,或:or,非:not 优先级:not>and>or 短路原则: 对 ...

  5. RNN概述-深度学习 -神经网络

    一 RNN概述    前面我们叙述了BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题. 1) BP算法 ...

  6. codeforces 303C. Minimum Modular(数论+暴力+剪枝+贪心)

    You have been given n distinct integers a1, a2, ..., an. You can remove at most k of them. Find the ...

  7. DFS中的奇偶剪枝(技巧)

    剪枝是什么,简单的说就是把不可行的一些情况剪掉,例如走迷宫时运用回溯法,遇到死胡同时回溯,造成程序运行时间长.剪枝的概念,其实就跟走迷宫避开死胡同差不多.若我们把搜索的过程看成是对一棵树的遍历,那么剪 ...

  8. 软件工程 part4 评价3作品 修改

    作品1 抢答器 地址: https://modao.cc/app/ylGTXobcMU7ePNi6tY53gG4iraLl0md评价: 老师有意见,我重新评价,这个作品是我测试最方便的,地址点进去直接 ...

  9. Thunder团队第五周 - Scrum会议1

    Scrum会议1 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 邹双黛在照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblo ...

  10. Java微笔记(3)

    Java 中的 static 使用之静态变量 Java 中被 static 修饰的成员称为静态成员或类成员. 它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享. 静态成员可以使用类名直接访 ...