效果演示

 

这个效果的制作是借助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. python基础之全局局部变量及函数参数

    1.局部变量和全局变量 1.1局部变量 局部变量是在函数内部定义的变量,只能在定义函数的内部使用 函数执行结束后,函数内部的局部变量会被系统收回 不同函数可以定义相同名字的局部变量,但是各用个的互不影 ...

  2. 第七模块:项目实战一 第1章 项目实战:CRM客户关系管理系统开发

    01-crm介绍 02-权限系统介绍 03-第一版表结构设计 04-第二版表结构设计 05-orm中创建表结构 06-销售管理系统业务 07-销售管理系统权限信息录入 08-快速实现简单的权限控制的设 ...

  3. Micro:bit 硬件架构介绍

    Micro:bit做为当红的少儿编程工具,这两年在编程教育领域越来越火.今天就从硬件架构开始,分享Micro:bit的相关主题. Microbit 硬件设计是根据ARM mbed技术所开发的应用IC及 ...

  4. Java进阶知识点:更优雅地关闭资源 - try-with-resource

    一.背景 我们知道,在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制, ...

  5. win32绘制自定义类窗口导致绘制11个窗口的解决办法

    上网查了一圈也没有找到解决问题的办法,一旦创建了一个窗口,并且在过程函数中绘制窗口,尤其是一些非子窗口的自定义类窗口,都会生成11个窗口(算上主窗口就是12个),但是使用系统通用控件就不会有这种情况的 ...

  6. 最短路径算法(II)

    什么??你问我为什么不在一篇文章写完所有方法?? Hmm…其实我是想的,但是博皮的加载速度再带上文章超长图片超多的话… 可能这辈子都打不开了吧… 上接https://www.cnblogs.com/U ...

  7. SpringBoot项目打包成jar后,启动脚本

    将springboot项目打包成jar后,上传至服务器,每次都需要手敲命令,重新部署项目,可将这些命令写入脚本中,直接运行. 启动脚本(start.sh): CUR_PATH=$(cd "$ ...

  8. A4

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 很胖,刚学,照猫画虎做了登录与注册界面. 展示GitHub ...

  9. LintCode-50.数组剔除元素后的乘积

    数组剔除元素后的乘积 给定一个整数数组A. 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法. 样例 给出A=[1 ...

  10. TCP系列23—重传—13、RACK重传

    一.RACK概述 RACK(Recent ACKnowledgment)是一种新的基于时间的丢包探测算法,RACK的目的是取代传统的基于dupthresh门限的各种快速重传及其变种.前面介绍的各种基于 ...