简述JavaScript起源
起源于美国的Netscape公司,原名为LiveScript,后改为JavaScript,他是一种脚本语言,用于与浏览器实现对话
JavaScript三大核心
ECMAScript,
Web浏览器对于EMCAScript来说是一个寄宿环境,但他并不是唯一的寄宿环境。事实上,还有不计其数的其他环境可以容纳ECMAScript实现。
文档对象模型(Dom,Document Object Model),
如果没有document(文档),DOM也就无从谈起。当创建了一个页面并把它加载到Web浏览器时,DOM就在幕后悄然而生。他根据编写的页面文档创建一个文档对象
浏览器对象模型 (Bom,Browser Object Model),
BOM提供了独立于内容的与浏览器窗口进行交互的对象。由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window.
javascript的特点
编写简单
无需编译,直接运行
面向对象的编程语言
JavaScript的运用方式
内部运用:在</body>结束语随意位置就可以,写入
<script type="text/javascript">
写入脚本js
<script/>
外部链接:
<script type="text/javascript" src="写入你的路径"></script>
声明变量:
var name='king';
console.log(name);
常亮赋值:
const PI=3.55;
const PI=3.84;
console.log(PI);
js最基本的三种输出方式:
console.log('hello king');
document.write('hello king')
alert('hello king');
命名规范:
var name='king';
var name1='king';
var name_1='king';
var $name='king';
变量赋值:
var name='king';
var name='queen';
console.log(name);
console.log(typeof name);
声明变量与未声明变量:
//1.声明变量不赋值,返回undefined
var hename
console.log(hename);
//2.直接输出未声明的变量,会报错
console.log(ahflk);
数据类型的转换:
number
var num1=10;
var num2=16;
string
var str1='king';
boolean
var boo=true;
var oo2=false;
undefined
var undef;
1)number + number = number
var num3=num1+num2;
console.log(num3);//26
console.log(typeof num3);
2)number + string = string
var str=num1+str1;
console.log(str);//10hello
console.log(typeof str);
3)number + boolean = number
var boo=num1+boo1;
console.log(boo);//11
console.log(typeof boo);
4)number + undefined = number
var und=num1+undef;
console.log(und);//NAN
console.log(typeof und);
5)string + boolean = string
var stb=str1+boo1;
console.log(stb); //kingtrue
console.log(typeof stb);
6)string + undefined = string
var sfind=str1+undef;
console.log(sfind);/kingundefined
console.log(typeof sfind);
数据类型转换减法操作:
var num1 = 10;
var str1 = "11";
var str2 = "Hello";
var str3 = "35";
var str4 = "waht";
console.log(num1+str1);//1011
console.log(num1-str1);// -1
console.log(str1+str3);//1135
console.log(str3-str1);//24
console.log(str2-str4);//NaN
运算符-逻辑运算符:
var num = parseInt(prompt("请输入一个数字"));
//判断 num 是否在 0~10之间
var result=(num>=0&&num<=10);
console.log(num+"在0~10之间吗?"+result);
转换:
parseInt();-转换成整数;(没有四舍五入)。
parseFloat();转换为小数;基本不变 如果是0.xx的话可省略小数点前面的0。
Number();转换为number类型最后结果只会是unmber(数字)类型。
toString();转换成字符串最后结果都是字符串(string);。
toFixed();按要求保留小数位数。
a.toFixed();括号里面是保留几位小数不能过于大,有四舍五入的功能。
显示装换 强制转换:
parseInt();转换成整数
var a=5.3;
var b=parseInt(a);
console.log(typeof a);
parseFloat();转换成小数
var a='.33';
var b=parseFloat(a);
cosole.log(b);
console.log(typeof b);
Number();转换成number类型
var a='5';
var b=Number(a);
console.log(b)
console.log(typeof b)
toSting();转换成字符串
var a=3
var b=a.toSting();
console.log(b);
console.log(ty
toFiexd();按要求保留几位小数
var a=14.95;
var b=a.toFixed(1);
console.log(b);
三目运算法:条件+?score>=60?就是条件;
如: (
var score=prompt('成绩')
var result=score>=60?'合格':'不合格';
alert(result); )
满足两个条件(
var sleep=prompt('请输入您的睡眠时间')
var result=sleep>=8?'正常':'不正常';
var result=sleep<=10?'正常':'不正常';
alert(result); )
符号引用:
与(和,且):&&;
或:||
非:! 去与它相反的(如果他是对的用“非”的话就是错的)
有假且(&&)为假,有真或(||)为真意思是
在“和”(&&)里只要有一个是假的那他整个都是假的
在“或”(||)里面有一个是真的那么他全部都是真的
在 和(&&)里面有一个是假的它输出的就是false 在或里面有一个是真的那么他输出的就是true
循环语句:while
var a=1;
while(a<=10){
console.log('GOGOGO');
a++;
}
(1-100)
var a=1;
while(a<=100){
document.write(a);
a++;
}
var a=1;
while(a<=100){
document.write(a++);//++a:偶数;a++:奇数;
a++;
}
模:
var a=1;
while(a<=100){
if(a%2==0){
console.log(a);
};
a++;
};
var a=1;
while(a<=100){
console.log(a);
a+=a=2;
};
for循环语句:
for(1.声明一个(多个)变量;条件;对变量进行操作)
for(var i=1;i<=10; i++){
console.log('hello word');
}
for(var i=1;i<=100; i++){
console.log(i);
}
for(var i=1;i<=100;i++){
if (i%2==0){
console.log(i);
}
}
//奇数:
for(var i=1,sum=0;i<=100;i++){
if(i%2==1){
sum=sum+i;
}
}
console.log(sum);
//偶数:
for(var i=1,sum=0;i<=100;i++){
if(i%2==0){
sum=sum+i;
}
}
console.log(sum);
求出数组中的最大值:
var arr=[1,3,4,2,5];
for(var i=0,sum=arr[0];i<=arr.length;i++){
if(arr[i]>sum){
sum=arr[i];
}
}
console.log(sum);
1.遍历数组,同时声明变量sum并且赋值为数组中的某个元素
2如果数组中的当前元素大于sum,就把数组中的当前元素赋值给sum
3.输出sum
for循环:
//五行星星:
for(var a=1;a<=5;a++){
document.write('
');
for(var b=1;b<=10;b++){
document.write('*')
}
}
//三角星星:
for(var a=1;a<=5;a++){
document.write('
');
for(var b=1;b<=a;b++){
document.write('*')
}
}
//99乘法表:
for(var a=1;a<=9;a++){
document.write('
');
for(var b=1;b<=a;b++){
document.write(b+''+a+'='+(ab)+'\t')
}
}
数组:内存中的一段存储空间,多个变量的集合 创建一个数组(声明)
var arr=[]; 声明了一个空数组
var arr=new Array();
给数组中添加值
var arr=[1,2,3,4,5];
var arr1=['a','b','c','d'];
var arr2=[true,false]
数组中的值不限制数据类型
数组不限制长度
两个特点
1.下标:标识数组中元素的位置,从0开始,递增不重复
2.长度 length
var arr=[1,2,3,4,5,6,7,8,9];
0 1 2 3 4 5 6 7 8
console.log(arr.length)
输出数组中下标为4的值
consolze.log(arr[4])
数组的长度等于最大下标+1
给数组下标为11的位置处添加元素
arr[11]='a'
console.log(arr);
//数组API:
1.String();把数组转换成字符串
var arr=[1,2,3,4,5];
var str=String(arr);
console.log
2.join('拼接符');拼接,最后拼接成的是字符串
如果没有拼接符,默认等于String;
var arr=['h','e','l','l','o'];
var str=arr.join('-');
var str=arr.join('');
var str=arr.join();
console.log(str);
3.const();拼接 结果还为数组
var arr=['a','b','c'];
var arr2=[1,2,3,4,5];
var str=arr.concat(1,2);
var str=arr.concat(arr2);
console.log(str);
4.slice(starti,endi+1);截取
特点:1含头不含尾
2.如果省略第二个参数,默认从starti开始截取到结尾
3.如果一个参数都不写,相当于复制原数组
4.支持负数参数
var arr=['a','b','c','d','e','f','g'];
0 1 2 3 4 5 6
var str=arr.slice(2,5);
var str=arr.slice(2);
var str=arr.slice();
var str=arr.slice(-3,-1);
console.log(str);
5.splice(starti,n);
删除 插入 替换
var arr=['a','b','c','d','e','f'];
0 1 2 3 4 5
删除:
var str=arr.splice(3,2);
插入var str=arr.splice(3,0,'1','2');
替换
var str=arr.splice(3,2,'A','B');
console.log(str);
console.log(arr);
6.翻转
var arr=[1,2,3,4,5];
var str=arr.reverse();
console.log(str);
7.push();给数组末尾添加元素
var arr=[1,2,3,4,5];
var str=arr.push('a',10);
console.log(arr);
pop();删除数组末尾的元素
var arr=[1,2,3,4,5];
var str=arr.pop();
console.log(arr);
unshift();给数组开头添加一个元素
var arr=['a','b','c']
var str=arr.unshift('fff');
console.log(arr);
shift();删除
var arr=[1,2,3,4,5];
var str=arr.shift();
console.log(arr);
//Dom: 操作页面元素(增删改查)
1.查找:
一.通过元素间的关系查找
1)父子关系
parentElement 查找一个元素的父元素
console.log(ceshi.parentElement) //查找id为ceshi的父元素
ceshi.parentElement.style.backgroundColor='#ccf'; //设置ceshi父元素的背景色
children 查找一个元素的所有子元素(输出为数组形式)
console.log(ceshi.children); //查找id为ceshi的所有子元素(!结果为数组形式!)
ceshi.children[2].style.color='#f00';//给ceshi的子元素中下标为2的设字体颜色
var a=ceshi.children; //给ceshi的所有子元素的设置字体颜色
for(var i=0;i
ceshi.children[i].style.backgroundColor='#0f0';
}
console.log(ceshi.children[2].children[0].children[2])
var b=ceshi.children[2].children[0].children[2];
b.style.color='#50f';
firstElementChild 查找一个元素的第一个子元素(输出为原来的形式)
lastElementChild 查找一个元素的最后一个子元素(输出为原来的形式)
// console.log(ceshi.firstElementChild.)
2)兄弟关系
previousElementSibling 前一个兄弟
nextElementSibling 下一个兄弟
//找 阳光的快乐生活
var c=ceshi.firstElementChild.nextElementSibling.children[0].firstElementChild.nextElementSibling;
console.log(c);
c.style.backgroundColor='#00f';
//找 回村的诱惑
var d=ceshi.children[2].previousElementSibling.firstElementChild.lastElementChild;
console.log(d);
d.style.color='#ff0';
找 儿子去哪儿
var e=ceshi.firstElementChild.nextElementSibling.nextElementSibling.firstElementChild.lastElementChild
console.log(e);
e.style.backgroundColor='#0ff';
二.通过HTML查找
1)通过id查找
var ele=document.getElementById('id号'); //只能找到一个
var id=document.getElementById('ceshi');
console.log(id);
id.style.backgroundColor='#f0f';
2)通过class查找
var ele=document.getElementsByClassName('class名'); //可以找到多个 并且返回一个动态集合(数组)
var main=document.getElementsByClassName('main');
console.log(main);
main[0].style.backgroundColor='#ff0';
3)通过标签名查找
var ele=document.getElementsByTagName('标签名') //可以找到多个 并且返回一个动态集合(数组)
var li=document.getElementsByTagName('li');
console.log(li);
for(var i=0;i
li[i].style.color='#c2c';
};
4)通过name属性查找
var ele=document.getElementsByName('name'); //可以找到多个 返回动态集合 (数组)
var uname=document.getElementsByName('uname');
console.log(uname)
三.通过选择器查找
- var ele=document.querySelector('选择器'); //只能找到一个
var lia=document.querySelector('#ceshi>li>ul>li:last-child');
console.log(lia);
lia.style.color='#f0f';
- var ele=document.querySelectorAll('选择器'); 查找所有 返回动态集合 (数组)
var liall=document.querySelectorAll('.main>li');
console.log(liall);
for(var i=0;i
liall[i].style.backgroundColor='#cf0';
}
//函数:预先定义好的,可以被反复利用的代码块
function fn(){fn 表示函数名
代码
console.log('hello js');
例:<body>
<button onclick="myFunction(4,8)">点击</button>
<script>
function myFunction(a,b){
alert('hello js');
}
带参数的函数
function myFunction(a,b){
alert(a*b);
}
外链接
var bth=document.getElementById('btn');
bth.onclick=function(){
alert('点击');
}
</script>
</body>
练习:
<style type="text/css">
div{
width:200px;
height:200px;
background:green;
}
</style>
<body>
<button id="btnn">按钮</button>
<button id="btnn">显示</button>
<div></div>
</body>
<script>
第一种方法
var a=document.getElementById('btn');
a.onclick=function(){
var b=document.querySelector('div');
b.style.display='none';
var a=document.getElementById('btn');
a.onclick=function(){
var b=document.querySelector('div');
b.style.display='block';
}
}
第二种方法
var btn=document.querySelector('#btnn');
var div=document.querySelector('div');
var num=1;
btn.onclick=function(){
if(num==1){
div.style.display='none';
num=0;
}else{
div.style.display='block';
num=1;
}
}
</script>
正则:
1.search
search(/正则/);判断是否包含符合规定的关键词
varstr='you can you up';varstrs=str.search(/you/);//返回关键词的位置varstrs=str.search(/uoy/);//找不到返回-1console.log(strs);
2.match
match(/正则/); 获得所有和正则匹配的关键词
varstr='good good study,Day day up';// var strs=str.match(/d/);varstrs=str.match(/d/gi);console.log(strs);
3.exec
exec();既获得每个关键词的位置又获得每个关键词的内容
varstr='good good study,Day day up';varreg=/day/g;console.log(reg.exec(str));
4.replace
replace(/正则/ig,'替换值'); 替换
varstr='no zuo no die';varstrs=str.replace(/no/ig,'*');console.log(strs);
5.spilit
spilit(/正则/);切割 //切割完返回一个数组
varstr='no,zuo,no,die';varstrs=str.split(/,/);console.log(strs);
js轮播实现:
var banner=document.querySelectorAll('.banner>ul>li>a>img');
var point=document.querySelectorAll('.banner>p>span');
var timer;
var i=0;
function play(){
timer=setInterval(function(){
banner[i].style.display='none';
point[i].style.background='#8b8b8b';
i++;
if(i>1){
i=0;
}
banner[i].style.display='block';
point[i].style.background='#ff8800
},2000)
}
play();
//给box添加鼠标移入移出事件
var box=document.querySelector('.banner>ul');
box.onmouseover=function(){
clearInterval(timer);
}
box.onmouseout=function(){
play();
}
//点击圆点切换
for(var j=0;j<point.length;j++){
point[j].index=j;
point[j].onclick=function(){
var nu=this.index;
for(var b=0;b<point.length;b++){
banner[b].style.display='none';
point[b].style.background='#8b8b8b';
}
banner[nu].style.display='block';
point[nu].style.background="#ff8800";
}
}
计时器:
css样式
<button class='btn1'>停止一次性定时器</button>
<button class='btn2'>停止永久性定时器</button>
script 一次性定时器
var btn1=document.querySelector('.btn1');
var btn2=document.querySelector('.btn2');
function show(){
console.log('这是一次性定时器');
}//一次性定时器
script 永久性定时器
var timer=setTimeout(show,3000);
btn1.onclick=function(){
clearTimeout(timer);
}
function print(){
console.log('这是永久性定时器');
}
var times=setInterval(print,1000);
btn2.onclick=function(){
clearTimeout(times);
}
instanceof:
var arr=[1,2,3,4,5];
var obj={name:'jack'};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
深度克隆:
var student={
name:'jack',
age:18,
friend:['lily','lucy']
}
function clone(obj){
var newObj=obj instanceof Array?[]:{};
for(var key in obj){
if(obj[key] instanceof Object){
newObj[key]=clone(obj[key]);
}else{
newObj[key]=obj[key];
}
}
return newObj;
}
var newObj=clone(student);
student.friend[0]='rose';
console.log(student.friend[0]);
console.log(newObj.friend[0]);
事件委托:
事件委托:可以简单第理解为将子集的事件委托给父级来处理
div
<div class='boxs'>
<button class='btn1'>按钮1</button>
<button class='btn2'>按钮2</button>
</div>
script 第一种写法
var btn1 = document.querySelector(".btn1");
var btn2 = document.querySelector(".btn2");
btn1.addEventListener("click",function(){
console.log(this.innerHTML)
})
btn2.addEventListener("click",function(){
console.log(this.innerHTML)
})
script 第二种写法
var btnArray = document.querySelectorAll("button");
for(var i = 0;i<btnArray.length;i++){
btnArray[i].addEventListener("click",function(){
console.log(this.innerHTML)
})
}
第三种:使用事件委托的方式实现
var box=document.querySelector('.boxs');
box.addEventListener('click',function(event){
var target=event.target;
console.log(target.innerHTML);
})
仿微博发表评论:
1)css样式
{
margin:0;
padding:0;
}
a{
text-decoration: none;
}
input{
border:0;
}
li{
list-style: none;
}
.container{
width:800px;
margin:0 auto;
/border:1px solid #000;/
padding:20px;
}
input{
border:1px solid #666;
width:100%;
height:100px;
padding-left:10px;
}
.content>p{
font-weight: bold;
font-size: 20px;
padding:10px;
}
.content>p>span{
font-weight: normal;
font-size:14px;
margin-left:400px;
}
.content>button{
width:70px;
height:40px;
line-height: 40px;
background: #e4393c;
border-radius: 5px;
border:0;
font-size: 16px;
font-weight: bold;
color:#fff;
margin-top:10px;
margin-left:90%;
}
.main{
width:100%;
border:1px solid #000;
overflow: hidden;
border-radius: 20px;
margin-top:20px;
padding:0 10px;
}
.main>img,.main>p{
float:left;
}
.main>img{
width:100px;
height:100px;
}
.main>p{
width:500px;
height:100px;
line-height: 100px;
padding-left:50px;
/border:1px solid #000;*/
}
.main>button{
width:70px;
height:40px;
line-height: 40px;
background: #e4393c;
border-radius: 5px;
border:0;
font-size: 16px;
font-weight: bold;
color:#fff;
float:right;
margin-top:30px;
}
2)div
<div class='container'>
<div class='content'>
<p>你想对楼主说点什么 <span>你最多可输入30个字符</span></p>
<input type="text" name="" placeholder="请输入你想要说的内容">
<button>发表</button>
</div>
</div>
3)script
把图片做成随机数
var btn=document.querySelector('.content>button');
btn.onclick=function(){
var inputVal=document.querySelector('.content>input').value;
//动态创建元素:
//动态创建div
var div=document.createElement('div');
div.className='main';
var img=document.createElement('img');
var arr=['img/1.jpg','img/2.jpg','img/3.jpg'];
var num=Math.floor(Math.random()*3);
img.src=arr[num];
div.appendChild(img);
var p=document.createElement('p');
p.innerHTML=inputVal;
document.querySelector('.content>input').value='';
div.appendChild(p);
var button=document.createElement('button');
button.innerHTML='删除';
button.onclick=function remov(){
this.parentElement.parentElement.removeChild(this.parentElement);
}
div.appendChild(button);
document.querySelector('.container').appendChild(div);
}
仿新浪微博发布评论js代码:
1)css样式
.main{
width: 800px;
margin:20px auto;
}
span{
display: inline-block;
width: 200px;
height: 25px;
line-height: 25px;
vertical-align: middle;
text-align: left;
margin-bottom: 10px;
}
.tag{
font-size: 13px;
margin-left: 370px;
vertical-align: bottom;
text-align: center;
margin-bottom: 0;
}
.text{
width: 750px;
height: 180px;
margin:0 auto;
resize:none;
}
input{
display: inline-block;
width: 80px;
height: 50px;
background: #E2526F;
border: 0;
margin-left: 670px;
margin-top: 10px;
}
.creatediv{
width: 675px;
height: 80px;
border: 1px solid gray;
position: relative;
margin-top: 10px;
padding-left: 75px;
}
.createinput{
width: 80px;
height: 30px;
position:absolute;
right: 5px;
bottom:5px;
}
.createimg{
width: 50px;
height: 50px;
position: absolute;
top: 15px;
left: 15px;
}
.createdivs{
width:600px;
height:50px;
position: absolute;
top: 15px;
left: 85px;
}
2)div
<div class="main">
<span>你想对楼主说点什么</span>
<span class="tag">你最多可以输入30个字符</span>
<textarea id="text" cols="30" rows="10" maxlength="30" class="text" spellcheck="false"></textarea>
<input type="button" value="发 表" id="ipt">
<div id="txt" ></div>
</div>
3)script
var textarea=document.getElementById("text");
var ipt=document.getElementById("ipt");
var txt=document.getElementById("txt");
ipt.onclick=function(){
var txtValue=textarea.value;
if(txtValue.length>0){
var divs=document.createElement("div");
var imgs=document.createElement("img");
var ps=document.createElement("p");
var inputs=document.createElement("input");
divs.setAttribute("class","creatediv");
imgs.setAttribute("class","createimg");
ps.setAttribute("class","createdivs");
inputs.setAttribute("class","createinput");
img.src="pic/1.jpg";
input.type="button";
inputs.value="删除";
ps.innerHTML=txtValue;
divs.appendChild(imgs);
divs.appendChild(ps);
divs.appendChild(inputs);
if(txt.children.length==0){
txt.appendChild(divs);
}else{
txt.insertBefore(divs,get_firstChild(txt));
}
inputs.onclick=function(){
this.parentElement.parentElement.removeChild(this.parentElement)
}
}
}
var textarea=document.getElementById("text");
var inputs=document.getElementById("ipt");
var txt=document.getElementById("txt");
ipt.onclick=function(){
var txtValue=textarea.value;
if(txtValue.length>0){
var divs=document.createElement("div");
var imgs=document.createElement("img");
var ps=document.createElement("p");
var inputs=document.createElement("input");
divs.setAttribute("class","creatediv");
imgs.setAttribute("class","createimg");
ps.setAttribute("class","createdivs");
inputs.setAttribute("class","createinput");
imgs.src="pic/1.jpg";
inputs.type="butto";
inputs.value="删除";
ps.innerHTML=txtValue;
divs.appendChild(imgs);
divs.appendChild(ps);
divs.appendChild(inputs);
if(txt.children.length==0){
txt.appendChild(divs)
}else{
txt.appendChild(divs,get_firstChild(txt));
}
inputs.onclick=function(){
this.parentElement
.parentElement
.removeChild(this.parentElement)
}
}
}
更改网页背景色:
window.onload=function(){
document.body.bgColor="#000";
定时器 一秒钟显示一个星星 一秒钟调用star一次
window.setInterval("star()",1000);
25 }
动画主函数:
function star(){
//创建图片节点
var imgObj = document.createElement("img");
//添加src属性
imgObj.setAttribute("src","images/lele.jpg");
//添加width属性 getRandom()随机数函数
var width = getRandom(20,120);
imgObj.setAttribute("width",width);
添加层叠样式表属性(style属性 行内样式)
var x = getRandom(0,window.innerWidth);
var y = getRandom(0,window.innerHeight);
//设置坐标 x y 为未知数
imgObj.setAttribute("style","position:absolute;left:"+x+"px;top:"+y+"px;");
//添加onclick事件属性
//this 代表当前对象,this是一个对象,只能在函数内使用
imgObj.setAttribute("onclick","removeImg(this)");
//将图片节点,挂载到<body>的父节点下
document.body.appendChild(imgObj);
函数:求随机数函数:
function getRandom(min,max){
var random = Math.random()*(max-min)+min;
//向下取整
random = Math.floor(random);
//返回结果
return random;
}
函数:删除节点
function removeImg(obj){
document.body.removeChild(obj);
}
动态创建表格:
var json='[{"ename":"Tom", "salary":10000, "age":25},{"ename":"John", "salary":11000, "age":28},{"ename":"Mary", "salary":12000, "age":25}]';
var emps=eval(json);
var table=document.createElement('table');
var thead=document.createElement('thead');
var tr=document.createElement('tr');
for(var key in emps[0]){
var th=document.createElement('th');
th.innerHTML=key;
tr.appendChild(th);
}
thead.appendChild(tr);
table.appendChild(thead);
//创建tbody
var tbody=document.createElement('tbody');
table.appendChild(tbody);
for(var i=0;i<emps.length;i++){
var tr=document.createElement('tr');
for(var key in emps[i]){
var td=document.createElement('td');
td.innerHTML=emps[i][key];
tr.appendChild(td);
}
tbody.appendChild(tr);
}
document.getElementById('data').appendChild(table);
一次性定时器:setTimeout
清除一次性定时器用clearTimeout
var timer=setTimeout(show,3000);
btn1.onclick=function(){
clearTimeout(timer);
}
永久性定时器:setInterval
清除永久性定时器用clearInterval
var times=setInterval(print,1000);
btn2.onclick=function(){
clearInterval(times);
}
<script type="text/javascript">
function task(){
var now=new Date();
var end=new Date('2018/5/25 18:00');
var s=(end-now)/1000;
if(s>0){
var h=Math.floor(s/3600);
var m=Math.floor(s%3600/60);
s=Math.floor(s%60);
document.querySelector('span').innerHTML=h+'小时'+m+'分钟'+s+'秒';
}else{
clearInterval(timer);
document.querySelector('span').innerHTML='放学了';
}
}
task();
var timer=setInterval(task,1000);
function stop(btn){
if(btn.innerHTML=="||"){
clearInterval(timer)
btn.innerHTML="|>";
}else{
timer=setInterval(task,1000);
btn.innerHTML="||";
}
}
</script>
万年历:
<style>
*{
margin:0;
padding:0;
}
li{
list-style: none;
}
a{
text-decoration: none;
}
.ul{
width:500px;
background: #999;
overflow: hidden;
padding-bottom: 10px;
}
.ul li{
float:left;
width:100px;
margin-left:20px;
height:50px;
line-height: 50px;
text-align: center;
background: #000;
color:#fff;
margin-top:10px;
}
div{
width:500px;
height:50px;
border:1px solid #000;
}
.ul>li>ul{
display:none;
}
</style>
<body>
<ul class='ul'>
<li>
1
<ul>
<li>1</li>
</ul>
</li>
<li>
2
<ul>
<li>2</li>
</ul>
</li>
<li>
3
<ul>
<li>3</li>
</ul>
</li>
<li>
4
<ul>
<li>4</li>
</ul>
</li>
<li>
5
<ul>
<li>5</li>
</ul>
</li>
<li>
6
<ul>
<li>6</li>
</ul>
</li>
<li>
7
<ul>
<li>7</li>
</ul>
</li>
<li>
8
<ul>
<li>8</li>
</ul>
</li>
<li>
9
<ul>
<li>9</li>
</ul>
</li>
<li>
10
<ul>
<li>10</li>
</ul>
</li>
<li>
11
<ul>
<li>11</li>
</ul>
</li>
<li>
12
<ul>
<li>12</li>
</ul>
</li>
</ul>
<div></div>
<script>
var li = document.querySelectorAll('.ul>li');
var div = document.querySelector('div');
for(var i = 0; i < li.length; i++) {
li[i].onmouseover = function() {
this.style.background = '#fff';
this.style.color = '#f00';
div.innerHTML = this.children[0].children[0].innerHTML;
}
li[i].onmouseout = function() {
this.style.background = '';
this.style.color = '';
}
}
</script>
Date 对象用于处理日期和时间。
创建 Date 对象的语法:
var myDate=new Date();
Date对象的方法:
Date() //返回当日的日期和时间
getDate() //从 Date 对象返回一个月中的某一天 (1 ~ 31)
getDay() //从 Date 对象返回一周中的某一天 (0 ~ 6)
getMonth() //从 Date 对象返回月份 (0 ~ 11)
getFullyare //从 Date 对象以四位数字返回年份
getHours() //返回 Date 对象的小时 (0 ~ 23)
getMinutes() //返回 Date 对象的分钟 (0 ~ 59)
getSeconds() //返回 Date 对象的秒数 (0 ~ 59)
getMilliseconds() //返回 Date 对象的毫秒(0 ~ 999)
等等有很多对象方法API,可以去w3school官网查找学习
date示例如下:
JavaScript代码块
function time() {
var a = new Date(); //获取当前时间
var year = a.getFullYear(); //年
var month = a.getMonth(); //月
var dat = a.getDate(); //日
var day = a.getDay(); //周
var hour = a.getHours(); //时
var min = a.getMinutes(); //分
var sec = a.getSeconds(); //秒
document.write('现在时间' + year + '年' + month + '月' + dat + '日,星期' + day + '\t' + hour + '时' + min + '分' + sec + '秒'); //最后拼接在一块
}
time(); //调用
效果:
当然这个效果是静态的效果并不会动的效果,如果你想要附加给他走起来的效果的得用到定时器,定时器分为:一次定时器setTimeout、永久定时器setInterval;
永久定时器setInterval写法:
注释:设置一个定时器,到达指定时间执行我们的操作,然后定时器并没有停止,以后每隔这么长时间,都重新执行我们的操作
setInterval(function() {
var a = new Date(); //获取当前时间
var year = a.getFullYear(); //年
var month = a.getMonth(); //月
var dat = a.getDate(); //日
var day = a.getDay(); //周
var hour = a.getHours(); //时
var min = a.getMinutes(); //分
var sec = a.getSeconds(); //秒
document.getElementById('date').innerHTML = '现在时间' + year + '年' + month + '月' + dat + '日,星期' + day + '\t' + hour + '时' + min + '分' + sec + '秒'; //最后拼接在一块,输出到指定地点
})
一次定时器setTimeout写法:
注释:设置一个定时器,到达指定的时间,执行我们的操作,定时器停止
setTimeout(function() {
var a = new Date(); //获取当前时间
var year = a.getFullYear(); //年
var month = a.getMonth(); //月
var dat = a.getDate(); //日
var day = a.getDay(); //周
var hour = a.getHours(); //时
var min = a.getMinutes(); //分
var sec = a.getSeconds(); //秒
document.getElementById('date').innerHTML = '现在时间' + year + '年' + month + '月' + dat + '日,星期' + day + '\t' + hour + '时' + min + '分' + sec + '秒'; //最后拼接在一块
},2000) //2000意思就是两秒之后执行操作
一、 认识正则
1、 什么是正则
正则就是一个事物的规则。什么是正则表达式,就是描述事物规则的式子。
2、 正则能帮我们干什么?
1)做表单验证
2)制作QQ表情
3)制作小偷程序
正则就是做字符串的查找、匹配、分割、替换。是字符串方法的升级版。
3 、正则难学吗?
这是一个邮箱的正则表达式 \w+@\w+(.com|.cn|.org|.net){1,3}
对不懂正则规则的人,正则就是一堆乱七八糟的字符串就,正则像医生的字,道士的符,就是天书。只要学习这个规则,其实正则对我们来说就非常简单了。正则非常好学。
4 如何学习正则
学好正则只需要学两个东西
1) 正则表达式:就是描述事物规则的式子
2) 正则函数:没有正则函数,正则表达式就是一堆乱七八糟的字符串,正则表达式要起作用,必须和正则函数一起使用。
二 、正则的基本语法
1 声明一个正则对象
①用正则构造函数
var patt = new RegExp(‘正则表达式’,’修饰符’);
②使用正则字面量的方式
var patt = /正则表达式(描述事物规则的字符串)/修饰符;
2 正则表达式
正则表达式分四块内容,只要学好这四块,你就可描述任务事物的规则了。
如我们可以定义一个电话号码的规则表达式,这样就可以检查一个字符串是否是电话号码了。
① 定界符 ,正则中的定界符就是定义正则表达式边界的。符号是 / /,作用就是告诉程序,定界符内的是正则表达式,要按照正则的语法规则进行解析。
② 原子,自然界中的原子就是组成物质的最小单位。正则中的原子是组成正则表达式的最小单位。原子分三种
(1) 普通原子
(2) 转义符号、特殊符号,常见的转义符号有\n 换行 \r回车 \t 水平制表符 /输出定界符 \”输出双引号。。。。。。
(3) 通配符
\d 表示任意一位数字0-9 \D任意一位非数字 非0-9
\w 表示任意一位数字、字母下划线 \W任意一位非数字字母下划线
\s 表示任意一位空白字符 如空格 \S任意一位非空白字符
\b 表示一个单词的边界 空格 \B表示非单词边界 非空格
③ 元字符
元字符是修饰原子的,不能单独单独存在
(1)[] 从多个原子中选一个
(2) ^ 如果是出现在[]中,表示取反的意思,一定不能有
(3) ^ 如果出现在正则表达式开头,表示以xxx开头的意思
(4) / 字符串要匹配此表达式,必须满足三个条件
1 字符串以a开头
2 字符串以a结尾
3 字符串只能含一个a
/^ a+$/ 字符串要匹配此表达式,必须满足三个条件
1 字符串以a开头
2 字符串以a结尾
3 字符串可以含一个或多个a
(5)+ 表示匹配前面的原子一次或多次,大于0次
(6)? 表示匹配前面的原子0次或1次
(7)* 表示匹配前面的原子0次1次或多次,任意次
(8){m} 匹配前面的原子m次
(9){m,} 前面的原子最少出现m次
(10){m,n} 前面的原子最少出现m次,最多出现n次
(11) | 从多分支中选一个 abc|opq|xyz
(12) . 表示除了换行符以外的任意符号
(13) .* 匹配任意字符(除换行符)任意多次,这种匹配是贪婪匹配,如果有好几部分满足,取最长符合要求的子串
(14) .*? 不贪婪的匹配任意符号任意多次
(15) ()叫做模式单元
他的几个作用
1 把()中的内容作为整体处理 ab|c a(b|c)
2 ()中的内容会在内存中单独存放一份,方便使用
3通过正则的匹配函数,返回一个数组,数组中下标为0的元素中放的是满足正则规则的子串,下标为1的元素中放的是,第一个()中匹配的内容, 下标为1的元素中放的是,第一个()中匹配的内容,依次类推。
4如果不想匹配括号中的内容 使用(?:) 三元运算符
④ 修饰符
i 忽略大小写
m 把字符串作为多行对待
g 全局匹配
3 正则函数
分两大类,一类是字符串的正则方法,一类是正则对象的方法
一 字符串的正则方法
string.match()
string.search()
string.replace()
string.split()
二 正则对象的方法
patt.test()
patt.exec()
patt.complie()
重点、几个例子
点击导航栏内容变
<style>
*{
margin:0;
padding:0;
}
li{
list-style:none;
}
a{
text-decoration: none;
}
.container{
width:600px;
margin:100px auto;
}
.nav{
height:40px;
line-height: 40px;
overflow: hidden;
}
.nav li{
float:left;
}
.nav li a{
display:inline-block;
width:150px;
height:40px;
text-align: center;
color:#fff;
background: #000;
}
.nav li:first-child a{
background: #f00;
}
/*box*/
.box{
position: relative;
}
.box li{
width:600px;
height:300px;
line-height: 300px;
text-align: center;
position: absolute;
background: #eee;
display: none;
}
.box li:first-child{
display: block;
}
</style>
</head>
<body>
<div class='container'>
<ul class='nav'>
<li><a href="#">新闻</a></li>
<li><a href="#">娱乐</a></li>
<li><a href="#">综艺</a></li>
<li><a href="#">军事</a></li>
</ul>
<ul class='box'>
<li>还在打王者LOL呢?国家大事你关心了么?</li>
<li>元芳薛之谦事件你怎么看?</li>
<li>娱乐圈的那点事,潜规则?</li>
<li>淘宝双十一你们是不是又要剁手了?</li>
</ul>
</div>
<script>
//找到nav中的li
var navLi=document.querySelectorAll('.nav li');
//找到box中的li
var boxLi=document.querySelectorAll('.box li');
//遍历navLi
for(var i=0;i<navLi.length;i++){
navLi[i].index=i;
navLi[i].onclick=function(){
//获取当前的索引值
var num=this.index;
for(var j=0;j<navLi.length;j++){
//统一样式
navLi[j].firstElementChild.style.background='#000';
boxLi[j].style.display='none';
}
navLi[num].firstElementChild.style.background='#f00';
boxLi[num].style.display='block';
}
}
</script>
万年历
<style>
*{
margin:0;
padding:0;
}
li{
list-style: none;
}
a{
text-decoration: none;
}
.ul{
width:500px;
background: #999;
overflow: hidden;
padding-bottom: 10px;
}
.ul li{
float:left;
width:100px;
margin-left:20px;
height:50px;
line-height: 50px;
text-align: center;
background: #000;
color:#fff;
margin-top:10px;
}
div{
width:500px;
height:50px;
border:1px solid #000;
}
.ul>li>ul{
display:none;
}
</style>
<body>
<ul class='ul'>
<li>
1
<ul>
<li>春节</li>
</ul>
</li>
<li>
2
<ul>
<li>二月二龙抬头</li>
</ul>
</li>
<li>
3
<ul>
<li>三八妇女节</li>
</ul>
</li>
<li>
4
<ul>
<li>4444444444</li>
</ul>
</li>
<li>
5
<ul>
<li>五月劳动节</li>
</ul>
</li>
<li>
6
<ul>
<li>666666666</li>
</ul>
</li>
<li>
7
<ul>
<li>777777777</li>
</ul>
</li>
<li>
8
<ul>
<li>888888888</li>
</ul>
</li>
<li>
9
<ul>
<li>999999999</li>
</ul>
</li>
<li>
10
<ul>
<li>十月一日国庆节</li>
</ul>
</li>
<li>
11
<ul>
<li>11111111111</li>
</ul>
</li>
<li>
12
<ul>
<li>1212121212</li>
</ul>
</li>
</ul>
<div></div>
<script>
var li = document.querySelectorAll('.ul>li');
var div = document.querySelector('div');
for(var i = 0; i < li.length; i++) {
li[i].onmouseover = function() {
this.style.background = '#fff';
this.style.color = '#f00';
div.innerHTML = this.children[0].children[0].innerHTML;
}
li[i].onmouseout = function() {
this.style.background = '';
this.style.color = '';
}
}
</script>
js轮播实现
var banner=document.querySelectorAll('.banner>ul>li>a>img');
var point=document.querySelectorAll('.banner>p>span');
var timer;
var i=0;
function play(){
timer=setInterval(function(){
banner[i].style.display='none';
point[i].style.background='#8b8b8b';
i++;
if(i>1){
i=0;
}
banner[i].style.display='block';
point[i].style.background='#ff8800
},2000)
}
play();
//给box添加鼠标移入移出事件
var box=document.querySelector('.banner>ul');
box.onmouseover=function(){
clearInterval(timer);
}
box.onmouseout=function(){
play();
}
//点击圆点切换
for(var j=0;j<point.length;j++){
point[j].index=j;
point[j].onclick=function(){
var nu=this.index;
for(var b=0;b<point.length;b++){
banner[b].style.display='none';
point[b].style.background='#8b8b8b';
}
banner[nu].style.display='block';
point[nu].style.background="#ff8800";
}
}
....................................................收工