效果演示

 

这个效果的制作是借助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. 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

    上一篇我们创建了工程和一个Factory的po对象(javaBean),我们也写好了Mapper的映射文件,接下来我们来完成生产厂家的DAO与SERVICE,以及CONTROLLER,还有做显示的JS ...

  2. JavaScript 正则

    元字符 预定义类 边界 ^在中括号中时,匹配非hello的 str = 'hello world' str.match(/[^hello]/g) //[" ", "w&q ...

  3. LeetCode 109——有序链表转化二叉搜索树

    1. 题目 2. 解答 2.1. 方法一 在 LeetCode 108--将有序数组转化为二叉搜索树 中,我们已经实现了将有序数组转化为二叉搜索树.因此,这里,我们可以先遍历一遍链表,将节点的数据存入 ...

  4. 2.重新安装CM服务

    步骤1.停止CM服务2.删除CM服务3.添加CM服务4.测试数据库 步骤 1.停止CM服务 2.删除CM服务 没有发现可以单独删除某一项CM服务,必须全部删除 3.添加CM服务 4.测试数据库 如果报 ...

  5. js经典试题之闭包

    js经典试题之闭包 1:以下代码输出的结果是? function Foo(){ var i=0; return function(){ document.write(i++); } } var f1= ...

  6. c# 读取xml文件 编写form

    主要思想:xml保存控件的数据,c#读取出来并加以显示. 难点:1.控件有父容器和子控件的关系:2.控件事件的添加. 1.控件有父容器和子控件的关系: 可以用绝对坐标在xml文件中先读取子控件再读取父 ...

  7. mysql唯一查询

    MySQL单一字段唯一其他字段差异性忽略查询.在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返 ...

  8. Java中的增强for循环

    增强 for 循环 1. 增强的 for 循环对于遍历 Array 或 Collection 的时候相当方便. import java.util.*; public class Test { publ ...

  9. 团队作业7——第二次项目冲刺(Beta版本)-第一篇

    1.当天站立式会议照片: 2.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块后台连接 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 ...

  10. iOS-明杰解决字段冲突,及数组映射

    /** 替换关键字的属性名 */ + (NSDictionary *)mj_replacedKeyFromPropertyName{ return @{@"UUID":@" ...