短信发送验证倒计时案例(常用)

关闭定时器clearInterval

this 指向的是 事件的调用者 ,或者是函数的使用者。

button 不可以用 disabled 不可用的意思 意思是变成灰色不能按。

btn.disabled = “disabled” || btn.disabled = true;

因为 button是个双标签 所以要更改他的内容, 需要使用 innerHTML ,而不是value。

一般情况下,我们喜欢 var that = this;

<script>
     window.onload = function(){
         var btn = document.getElementById("btn");
         var count = 5;
         var timer = null;    这里必须要给timer给空值,不能给0
         btn.onclick = function(){
             clearInterval(timer);   在进行前首先要清定时器
             this.disabled =true;   将btn设置不可点击
            var that = this;     把btn的代表赋值给that,接下来this会代表的是定时器,而不是btn
             timer=setInterval(sec,1000);
             function sec() {
                 count--;
                 if(count>=0)
                 {
                     that.innerHTML = "已发送短信还剩"+count+"秒";
                 }
                 else
                 {
                     that.disabled = false;
                     that.innerHTML = "重新发送";
                     clearInterval(timer);  需要清定时器,否则会一直倒数。
                     count = 5;  重新赋值5就会到if中,否则永远会执行else。
                 }
             }
         }
     }
</script>

定时器2 setTimeout()

setTimeout(“函数”, 时间 ) 如果想让这个多次执行,那么需要在递归调用中使用

setInterval(fn,5000); 每隔 5秒钟,就去执行函数fn一次

setTimeout(fn,5000); 5秒钟之后,去执行 fn 函数, 只执行一次

setInterval是排队执行的

假如 间隔时间是1秒, 而执行的程序的时间是2秒 上次还没执行完的代码会排队, 上一次执行完下一次的就立即执行, 这样实际执行的间隔时间为2秒(意思是跳过间隔,不管间隔时间,直接只算执行的时间。)

setTimeout延迟时间为1秒执行, 要执行的代码需要2秒来执行,那这段代码上一次与下一次的执行时间为3秒. 如果遇到这种情况推荐使用这个。不过这个只执行一次。

5秒之后返回首页案例(重点)

JS 页面跳转: window.location.href = ”http://www.itcast.cn” ; BOM

函数自己调用自己的过程 我们称之为 : 递归调用

arguments对象 它只能在正在使用的函数内部使用。

arguments.callee; 返回的是正在执行的函数,它返回的是函数。 也是在函数体内使用。 在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

<script>
     var demo = document.getElementById("demo");
     var count = 5;
     var speed = 1000;
     setTimeout(getIndexPage,speed);
     function getIndexPage(){
         count--;
         demo.innerHTML = "<a href ='javascript:;'>页面没有找到,本页会在"+count+"秒钟之后跳转</a>";
         if(count<=0)
         {
             window.location.href = "http://www.baidu.com";
         }
         else
         {
             setTimeout(getIndexPage,speed);
setTimeout(arguments.callee,speed);还可以这么写,arguments代表正在使用的函数,只能在函数内部使用。
         }
     }
</script>

5秒后漂浮广告自动消失

!important天王盖地虎,小鸡炖蘑菇

<script>
     function $(id){
         return document.getElementById(id);
     }
     function hide(id ){
         $(id).style.display= "none";
     }
     function show(id){
         $(id).style.display = "block"
     }
     a=setTimeout(closeAd,5000);
     function closeAd() {
         hide("left");
         hide("right");
     }
     // 这个如果想要做再打开是怎么做?
     /*clearInterval(a);
     setTimeout(showAd,5000);
     function showAd(){
         show("left");
         show("right");
     }*/
</script>

小米图片上下滚动案例

要使用定时器,先清除定时器。

clearInterval(timer);

<script>
     function $(id){return document.getElementById(id);}
     var num = 0;
     var timer =null;
     $("picUp").onmouseover = function() {
         clearInterval(timer);
         timer=setInterval(function(){
             num=-3;
             num>=-1070 ? $("pic").style.top = num +"px" : clearInterval(timer);
         },30);
         $("picDown").onmouseover = function() {
             clearInterval(timer);
             timer = setInterval(function(){
                 num++;
                 num<0 ? $("pic").style.top = num+"px" : clearInterval(timer);
             },30);
         }
         $("picUp").parentNode.onmouseout = function() {
             clearInterval(timer);
         }
     }

定时器顺序

结果为1,3,2.因为这种定时器是在其他执行完之后执行,就算是时间设定为0,只是表示插入队列,但是不是立即执行。需要等待前面的执行完毕,同时它不能保证执行时间,需要取决于js线程是拥挤还是空闲。

常用运算符

一元操作符 ++, -- + - +5 -6

逻辑操作符 ! && || 与或非

基本运算符 +, -, *, /, %

关系操作符 >, <, >=, <=, ===, ==, !=, !==

= 赋值 == 判断 === 全等

条件操作符 (三元运算符) ? :

赋值运算符 +=, -=, *=, /=, %=

a+=5 a= a + 5

逗号运算符 , var a=0,b=0;

运算优先级

1 ()

2 !、-、++、-- (-10) 负号 正号

3 *、/、%

4 +、- 10-5

5 <、<=、<、>=

6 ==、!=、===、!==、

7 && 与

8 || 或

9?:

10 =、+=、-=、*=、/=、%= 赋值

1+2*3

逻辑运算符(面试题)

运算顺序:!>&&>||

1. a&&b 结果是什么?

如果a 为假 ,则返回 a

如果a 为真 ,则返回 b

&&都真为真,||有真就真,!都假为假

var aa = 0&&1;

alert(aa) // 0

var bb = 1&&0;

alert(bb); //0

var cc = 1&&10;

alert(cc); // 10

a||b

如果 a 为假 则返回b

如果 a 为真 则返回a

console.log(0||1); 1

console.log(1||0); 1

console.log(1||5); 1

console.log(5||1); 5

var a = 1 && 2 && 3;

console.log(a); 3

var b = 0 && 1 && 2;

console.log(b); 0

var c = 1 && 0 && 2;

console.log(c); 0

%=

a+=3

a = a % 3;

注意&&优先级高于||,所以当碰到这两个都有的时候要先算&&,如果两个&&那就先算前面的。

字符串对象常用方法

1. + “” 2+ “” = “2” 2+”ab” = “2ab”

2. String() 转换为字符串

3. toString(基数) ; 基数就是进制

var txt = 10;

txt.toString(2) 二进制 1010

2进制除法

获取字符位置的方法

charAt,获取相应位置字符(参数: 字符位置)

charCodeAt获取相应位置字符unicode编码(参数: 字符位置)

var txt=”abcdefg”;

alert(txt.charAt(3));

结果为c

比如, txt.charAt(4); 索引号一定是从0开始 返回的结果是 d

我们根据我们输入的 位数 返回相应的 字符 。

unicode编码 是我们字符的字符的唯一表示 。

除了汉字外的键盘上所有的键都有unicod编码,可以用来检测按了键盘中的哪个键,每个键都对应唯一的字符。只要在0-127个字符里都是键盘上的,而大于的话肯定是有汉字或者双字节字符。

面试,常用多写,一般考字符串的长度,让写代码

<script>
     var txt = "what are you 弄啥咧!好的";
     console.log(txt.length);
     function getStringLength(str) {
         var len = 0; //存储总长度
         var c = 0;  // 存储每一个编码
         for(var i=0;i<str.length;i++)
         {
             c = str.charCodeAt(i);
             //alert(c);
             if(c>=0 && c<=127)
             {
                 len++;
             }
             else
             {
                 len += 2;
             }
         }
         return len;
     }      console.log(getStringLength(txt));
</script>

时钟案例

分两步进行的。

第一步: 要得到现在的 时 分 秒

但是这里面有一个小玄机 。

比如现在是 9点整 时针指向 9 是没错的

但是如果现在是 9点半 时针应该指向的是 9到10 之间 才对

所以,我们不但要得到现在的小时 ,还要得到 已经过去了多少分

旋转角度原理

秒针 一秒 走多少度呢 ?

一圈 360 ° 一共有 60 秒 每秒 6 °

分针 一圈 360 一圈走 60次 每次 6° 每分钟 6°

时针 一圈 360 一共 12 个 表盘没有24小时 每个小时 走 30

<script>
     window.onload = function() {
         var hour = document.getElementById("hour");
         var minute = document.getElementById("minute");
         var second = document.getElementById("second");
         var h= 0,m= 0,s= 0,ms=0;
         setInterval(function() {
             var date = new Date();
             ms = date.getMilliseconds();
             s =date.getSeconds()+ms/1000;
             m =date.getMinutes()+s/60;
             h = date.getHours()%12+m/60;
             second.style.webkitTransform = "rotate("+s*6+"deg)";
             minute.style.webkitTransform = "rotate("+m*6+"deg)";
             hour.style.webkitTransform = "rotate("+h*30+"deg)";
         },10);
     }
</script>

js基础第七天的更多相关文章

  1. Three.js基础探寻七——Lamber材质与Phong材质

    材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性.通过设置材质可以改变物体的颜色.纹理贴图.光照模式等. 本篇将介绍基本材质以及两种基于光照模型的材质(Lamber与Phong) ...

  2. [妙味JS基础]第七课:运算符、流程控制

    知识点总结 &&(与).||(或).!(非) 与: alert(20 && 20>100) => false alert(20 && 20& ...

  3. js基础练习二之简易日历

    今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...

  4. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  5. js基础梳理-如何理解作用域和作用域链?

    本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关 ...

  6. 前端工程师面试问题归纳(一、问答类html/css/js基础)

    一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...

  7. js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域

    js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...

  8. js 基础篇(点击事件轮播图的实现)

    轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...

  9. js 基础

    js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...

随机推荐

  1. CQRS学习——Cqrs补丁,async实验以及实现[其二]

    实验——async什么时候提高吞吐 async是一个语法糖,用来简化异步编程,主要是让异步编程在书写上接近于同步编程.总的来收,在await的时候,相当于附加上了一个.ContinueWith(). ...

  2. Atmel Studio 6.0 重新安装

    问题描述:        Atmel Studio 6.0 重新安装     在卸载Atmel Studio6.0之后,重新安装Atmel Studio6.0软件,提示cannot find one ...

  3. EasyUI datagrid 改变url属性 实现动态加载数据

    $(function () { //说明:btnsearch按钮,selCat下拉列表,ttdatagrid table $("#btnsearch").click(functio ...

  4. ACCESS数据库操作教程

    网易学院视频教程: 上:http://tech.163.com/06/0621/17/2K5K0C2200091U6J.html中:http://tech.163.com/06/0621/17/2K5 ...

  5. uva 567

    Floyd 算法   就输入麻烦点 #include <iostream> #include <cstring> #include <cstdlib> #inclu ...

  6. C语言不是C++的严格子集

    C语言是C++的子集吗?C++是在C语言的基础上扩展而来并包含所有C语言的内容吗? 回复: 从实用角度讲,C++属于C语言的一个超集,基本上兼容ANSI C.但是从编译角度上讲,C语言的有些特性在C+ ...

  7. R语言学习笔记:怎么从txt中读入数据

    1   从该链接中下载测试数据,http://pan.baidu.com/share/link?shareid=3322971616&uk=3862050759   2   把测试文件Anal ...

  8. eclipse myeclipse zend studio 中去掉双引号中的斜体

    去windows/preferences 菜单里,选Web/JSP Files/Editor/Syntax Coloring 在右边选Attribute Values ,把Italic的钩去掉就好了.

  9. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  10. I.MX6 Android 移除 Settings wifi功能

    /********************************************************************* * I.MX6 Android 移除 Settings w ...