效果演示

 

这个效果的制作是借助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. 阿里云ECS下Ubuntu 16.04系统安装python3.6.5 环境并设置为默认

    一.添加python3.6安装包并安装: 二.修改系统默认python版本为3.6: 三.安装并升级pip版本: 一.添加python3.6安装包并安装: sudo apt-get install s ...

  2. Java应用基础微专业-进阶篇

    第1章--使用对象 1.1 字符类型 char c = 65; // char --> int char c = '\u0041'; // \u: unicode + (Hex 41--> ...

  3. 【WXS全局对象】Date

    属性: 名称 说明 Date.parse( [dateString] ) 解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数. Date.UTC(year,month,day ...

  4. String和StringBuffer以及StringBuilder的区别

    今天在读<java编程思想>的时间,在看到String和StringBuffer以及StringBuffer这三个类的时间,做一个随笔小结,为自己的面试做好准备! 一:String,Str ...

  5. [Clr via C#读书笔记]Cp8方法

    Cp8方法 构造器 作用就是初始化所有成员字段:.ctor:派生类和基类都有自己的构造函数.默认有一个无参数的构造函数,值字段初始化为0,引用字段初始化为null:可以有多个构造器: 值类型的初始化其 ...

  6. SIG蓝牙mesh笔记3_网络结构

    目录 3. Mesh Networking 3.1 Bearers 承载层 3.2 Network Layer 网络层 3.2.3 Address validity 地址有效性 3.2.4 Netwo ...

  7. Thunder团队第六周 - Scrum会议4

    Scrum会议4 小组名称:Thunder 项目名称:i阅app Scrum Master:胡佑蓉 工作照片: 苗威同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblogs ...

  8. 计算器软件实现系列(六)windowform窗体+SQL+策略模式

    一 整体概述 这个计算器软件的功能和以前的功能基本上一样,只不过是数据的保存形式发生了变化,,以前用的是txt文件保存,现在更正用SQL数据库,现在更改了以前的文件保存形式,是三层架构中数据层的更换, ...

  9. JAVA mysql数据库 配置

    mysql 版本 5.7 数据库连接版本 <!--MySql--><dependency> <groupId>mysql</groupId> <a ...

  10. eg_2

    2. 编写一个程序,输出在一个字符串中,指定的字符串出现的次数 第一种方法: public class Test { public static void main(String[] args) { ...