js一次性定时器
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var n = 0;
/*
* 除了定时调用,还有一个延时调用
* 延时调用指函数不马上执行,而是过一段时间以后再执行
* 使用setTimeout()来设置延时调用,
* setTimeout()和setInterval()用法一样
* 也是需要两个参数:
* 1.回调函数
* 2.毫秒数
*
* 延时调用中的函数,只会执行一次。而定时调用会执行多次
* 定时调用和延时调用本质上没有区别,我们可以通过setTimeout()
* 实现setInterval()的功能,
* 也可以通过setInterval()实现setTimeout()的功能
*
*/
var timer = setTimeout(function(){
console.log(++n);
},1000);
//关闭延时调用
// clearTimeout(timer);
</script>
</head>
<body>
</body>
</html>
js周期性定时器
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
window.onload = function(){
/*
* 使h1中的内容,每隔1s修改一次
*/
//获取h1
var count = document.getElementById("count");
//修改h1中的内容
//count.innerHTML = 10;
/*
* 创建一个for循环,多次修改h1中的内容
* 循环语句执行的速度是非常非常的快的
*
*/
/*for(var i=0 ; i<10000 ; i++){
count.innerHTML = i;
alert("hello");
}*/
/*
* 定时调用
* - 定时调用指每间隔一段时间就调用指定的函数一次
* - 通过setInterval()来开启一个定时调用
* - 参数:
* 回调函数,该函数将会每间隔一段时间被调用一次
* 时间,函数调用相隔的时间(毫秒)
*
* - 返回值:
* 会返回一个number类型的值作为返回值,
* 这个number就是定时器的标识
*/
//定义一个变量来计数
var num = 1;
var timer = setInterval(function(){
count.innerHTML = num++;
//判断num
if(num == 11){
//关闭定时器
clearInterval(timer);
}
},1000);
//console.log(timer);
/*
* clearInterval()
* - 可以用来关闭一个定时器
* - 需要一个定时器的标识作为参数,需要用它来指定要关闭的定时器
*/
//clearInterval(timer);
};
</script>
</head>
<body>
<h1 id="count"></h1>
</body>
</html>
替换背景
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<input type="button" value="换背景吧" />
<input type="button" value="停" />
<script>
var aBtn = document.getElementsByTagName('input');
var arrUrl = [ 'img/1.jpg', 'img/2.jpg', 'img/3.jpg', 'img/4.jpg' ];
var num = 0;
var timer = null;
var oBody = document.body;
aBtn[0].onclick = function (){
clearInterval( timer ); // null、未定义
timer = setInterval(function(){
oBody.style.background = 'url('+ arrUrl[num] +')';
num++;
num%=arrUrl.length;
}, 1000);
};
aBtn[1].onclick = function (){
clearInterval( timer );
};
// oBody.style.background = 'url('+ arrUrl[num] +')';
</script>
</body>
</html>
定时器应用
getComputedStyle获得内部样式
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
#div1 { width:100px; height:100px; background:red; position:absolute; top:50px; left:300px; }
</style>
</head>
<body>
<input id="btn1" type="button" value="往后" />
<input id="btn2" type="button" value="往前" />
<div id="div1"></div>
<script>
var oBtn1 = document.getElementById('btn1');
var oBtn2 = document.getElementById('btn2');
var oDiv = document.getElementById('div1');
oBtn1.onclick = function () {
clearInterval( oDiv.timer );
oDiv.timer = setInterval(function () {
var speed = parseInt(getComputedStyle( oDiv).left) + -12; // 步长
if ( speed < 10 ) {
speed = 10;
}
oDiv.style.left = speed + 'px';
if ( speed == 10 ) {
clearInterval( oDiv.timer );
}
}, 30);
};
oBtn2.onclick = function () {
clearInterval( oDiv.timer );
oDiv.timer = setInterval(function () {
var speed = parseInt(getComputedStyle( oDiv).left) + 12; // 步长
if ( speed > 800 ) {
speed = 800;
}
oDiv.style.left = speed + 'px';
if ( speed == 800 ) {
clearInterval( oDiv.timer );
}
}, 30);
};
</script>
</body>
</html>
时间对象
new Date(yyyy,MM,dd,hh,mm,ss);
getTime(); 返回从1970年1月1日0点0分0秒0毫秒到现在的毫秒数
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
/*
系统时间对象
*/
// alert( new Date() ); // 当前系统的时间对象
// myTime typeof object
window.onload = function () {
var oBody = document.body;
setInterval( fnTime, 1000 );
fnTime ();
function fnTime () {
var myTime = new Date();
// number
var iYear = myTime.getFullYear();
var iMonth = myTime.getMonth()+1;
var iDate = myTime.getDate();
var iWeek = myTime.getDay();
var iHours = myTime.getHours();
var iMin = myTime.getMinutes();
var iSec = myTime.getSeconds();
var str = '';
if( iWeek === 0 ) iWeek = '星期日';
if( iWeek === 1 ) iWeek = '星期一';
if( iWeek === 2 ) iWeek = '星期二';
if( iWeek === 3 ) iWeek = '星期三';
if( iWeek === 4 ) iWeek = '星期四';
if( iWeek === 5 ) iWeek = '星期五';
if( iWeek === 6 ) iWeek = '星期六';
str = iYear+ '年' +iMonth+'月'+iDate+'日 '+iWeek+' '+ toTwo(iHours)+' : '+ toTwo(iMin)+' : '+ toTwo(iSec);
oBody.innerHTML = str;
}
};
// alert( toTwo(5) ); // '05'
// alert( toTwo(15) ); // '15'
function toTwo ( n ) {
return n < 10 ? '0' + n : '' + n;
}
</script>
</head>
<body style="font-size:60px;">
</body>
</html>
Math对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* Math
* - Math可以用来做数学运算相关的操作
* - Math并不是一个构造函数,我们也不需要去创建一个Math类型
* - Math是一个工具类,它里面封装了一些数学运算相关的常量和方法
*/
/*
* Math中的常量
* Math.PI 圆周率
*/
//console.log(Math.PI);
/*
* Math.abs()
* - 可以用来获取一个数的绝对值
*/
//console.log(Math.abs(10));
/*
* Math.ceil()
* - 可以对一个数进行向上取整
* - 只要小数点后有值就向上进1
*/
//console.log(Math.ceil(1.000001));
/*
* Math.floor()
* - 可以对一个数进行向下取整
* - 小数点后的值都舍去
*/
//console.log(Math.floor(1.01));
/*
* Math.round()
* - 对一个数进行四舍五入取整
*/
//console.log(Math.round(5.4));
/*
* Math.random();
* - 可以生产一个0-1之间的随机数
*
* - 生成一个 0-10 之间的随机数
* 生成 0 - x 之间的随机数
* Math.round(Math.random()*x)
*
* 生成一个 1 - 6之间的随机数
* 生产一个 x - y之间的随机数
* Math.round(Math.random()*(y-x) + x)
*
* 生成一个 1-8之间的随机数
* 生成一个 22-30之间的随机数
*
*/
for(var i=0 ; i<100 ; i++){
//console.log(Math.round(Math.random()*5));
//console.log(Math.round(Math.random()*8 + 22));
}
/*
* Math.max()
* - 可以从多个值中获取到最大值
* Math.min()
* - 获取多个值中的最小值
*/
var result = Math.max(100,20,55,77);
result = Math.min(100,20,55,77);
//console.log(result);
/*
* Math.pow(x,y)
* - 获取x的y次幂
*/
result = Math.pow(3,3);
/*
* Math.sqrt(x)
* - 求一个数的平方根
*/
result = Math.sqrt(2);
//console.log(result);
</script>
</head>
<body>
</body>
</html>
Map数据结构
map 类型包含一组有序的键值对,其中键和值可以是任何类型。
创建Map对象和Map的基本的存取操作
Map创建使用Map构造函数
向Map存储键值对使用set(key, value)方法
可以使用get(key),来获取指定key对应的value
<script type="text/javascript">
var map = new Map();
map.set("a", "lisi");
map.set("b", "zhangsan");
map.set("b", "zhangsan222"); // 第二次添加,新的value会替换掉旧的
console.log(map.get("a"));
console.log(map.get("b")); //zhangsan222
console.log(map.get("c")); //undefined.如果key不存在,则返回undefined
console.log(map.size); //2
</script>
Map的3个方法
has(key) - 判断给定的 key 是否在 map 中存在
delete(key) - 移除 map 中的 key 及对应的值
clear() - 移除 map 中所有的键值对
初始化Map
创建Map的时候,传入的数组中必须有两个元素,这个两个元素分别是一个数组。
也就是传入的实际是一个二维数组!
<script type="text/javascript">
//map接受一个二维数组
var map = new Map([
//每一个数组中,第一个是是map的可以,第二个是map的value。如果只有第一个,则值是undefined
["name", "lisi"],
["age", 20],
["sex", "nan"]
]);
console.log(map.size);
console.log(map.get("name"))
</script>
Map的forEach方法
<script type="text/javascript">
var map = new Map([
["name", "李四"],
["age", 20],
["sex", "nan"]
]);
/*
回调函数有函数:
参数1:键值对的value
参数2:键值对的key
参数3:map对象本身
*/
map.forEach(function (value, key, ownMap) {
console.log(`key=${key} ,vlue=${value}`);
console.log(this);
})
</script>
for…of循环遍历map
var map2 = new Map();
map2.set('abc',{no:1,name:'zhangsan'});
for(var item of map2)
{
alert(item[0]);
alert(item[1].name);
}
Map应用之统计文字出现次数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload=function () {
var btn = document.getElementById('btn');
btn.onclick = function () {
var content = document.getElementById('content').value;
var arr = content.split('');
var map = new Map();
for(var i = 0; i < arr.length; i++)
{
if(map.has(arr[i]))
{
var currentNum = map.get(arr[i]);
currentNum++;
map.set(arr[i],currentNum);
}
else
{
map.set(arr[i],1);
}
}
var str='';
// map.forEach(function(v,k,mapWord)
// {
// str+=`${k}---${v}<br>`;
// });
for(var item of map)
{
str+=`${item[0]}----${item[1]}<br>`;
}
var result = document.getElementById('result');
result.innerHTML = str;
}
}
</script>
</head>
<body>
<textarea id="content" rows="20" cols="30"></textarea>
<button id="btn">统计</button>
<div id="result">
</div>
</body>
</html>
js字符串练习
结题思路
1.用被替换的字符串,分隔正文成字符串数组(split)
2.用新字符串作为连接符,将字符串数组连接成一个字符串(join)
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
p { border:10px solid #ccc; background:#FFC; width:400px; padding:20px; font-size:16px; font-family:微软雅黑; }
span { background:yellow; }
</style>
</head>
<body>
<input type="text" />
<input type="text" />
<input type="button" value="替换" />
<p>奇克课堂是一支独具特色的IT培训团队,奇克反对传统IT教育枯燥乏味的教学模式,奇克提供一种全新的快乐学习方法!<br />
2013年底,奇克课堂最新推出"远程培训"服务,受到很多朋友们的喜爱与追捧,我们必将更加努力的帮助远程学习的朋友实现技术提升……</p>
<script>
var aInp = document.getElementsByTagName('input');
var oP = document.getElementsByTagName('p')[0];
aInp[2].onclick = function () {
var str = aInp[0].value; // '奇克'
var newStr = aInp[1].value;
if (!str)return;
oP.innerHTML = oP.innerHTML.split(str).join('<span>'+newStr+'</span>');
};
</script>
</body>
</html>
json简介
简介:
JSON(JavaScriptObject Notation)、采用完全独立于编程语言的文本格式来存储和表示数据。
JSON两种格式
1、对象
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
var person = { "name":"huochai", "age":29, "school":{ "name":"diankeyuan", "location":"beijing" }};
2.数组
var students =
[
{"sno":"001","name":"jack","age":130},
{"sno":"002","name":"tame","age":120},
{"sno":"003","name":"cule","age":110}
];
访问json对象的属性值
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
//JSON格式的attr访问 - 点号或者中括号 -注意:中括号里面可以放变量
var imgData={ "name":"图片描述和图片相对路径", "title":"logo图片","url":"logo.png" };
alert( imgData.name );
alert( imgData["name"] );
var str="name" ;
alert( imgData[str] );
var json1={"name":"这里是一组图片的文字描述和图片相对路径",
"title":["logo图片","图片1","图片2","图片3"],
"url":["logo.png","1.png","2.png","3.png"]
};
alert( json1.name);
alert( json1.url );
alert( json1.url[1] );
alert( json1["name"]);
alert( json1["url"] );
alert( json1["url"][1] );
var json2 ={ "name":"图片描述和图片相对路径",
"imgData":[
{ "name":"图片1", "title":"logo图片1","url":"logo1.png" } ,
{ "name":"图片2", "title":"logo图片2","url":"logo2.png" } ,
{ "name":"图片3", "title":"logo图片3","url":"logo3.png" }
]
};
alert( json2.name );
alert( json2.imgData[0].name );
alert( json2["name"] );
alert( json2["imgData"][0].name );
</script>
</head>
<body>
</body>
</html>
JSON对象两个方法
JSON对象有两个方法:stringify()和parse()。这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值
stringify()
var strPerson = JSON.stringify(person);
alert(strPerson);
var strStudents = JSON.stringify(students);
alert(strStudents);
parse()
JSON.parse方法用于将JSON字符串转化成对象
var strPerson = JSON.stringify(person);
var personObj = JSON.parse(strPerson);
var strStudents = JSON.stringify(students);
var studentsObj = JSON.parse(strStudents);
模板字符串
var name = "Neo";
var occupation = "programmer"; //不使用模板字符串拼接
var str = "He is "+ name +",he is a "+ occupation; //使用模板字符串拼接
var str = `He is ${name},he is a ${occupation}`;
模板字符串
var name = "Neo";
var occupation = "programmer"; //不使用模板字符串拼接
var str = "He is "+ name +",he is a "+ occupation; //使用模板字符串拼接
var str = `He is ${name},he is a ${occupation}`;
模板字符串不再需要反复使用双引号(或者单引号)了拼接字符串,而是改用反引号标识符( ` 键盘右上角~键),插入变量的时候也不需要再使用加号(+),而是把变量放入${ }即可。
使用模板字符串的注意点:
1、可以定义多行字符串
var str = `write once ,
run anywhere`;
2、${ }中可以放任意的javascript表达式
${ }中可以是运算表达式
var a = 1;
var b = 2;
var str = `the result is ${a+b}`; //进行加法运算 结果:the result is 3
${ }中可以是对象的属性
var obj = {"a":1,"b":2};
var str = `the result is ${obj.a+obj.b}`; //对象obj的属性
//结果:the result is 3.
json和模板字符串的综合应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--http://api.laifudao.com/open/xiaohua.json-->
<script>
window.onload = function () {
var jsonData = [
{
"title": "你谁啊?我新娘呢?",
"content": " 新郎在礼堂焦急的等待着新娘,过了好一会儿穿着婚纱的姑娘终于匆忙的赶来。 新郎一看愣了:“你谁啊?我新娘呢?” 姑娘抱歉的说:“她喝多了,我是代嫁。”",
"poster": "",
"url": "http://www.laifudao.com/wangwen/81923.htm"
},
{
"title": "哪有人用口香糖做喜糖的?",
"content": " 最近一位学姐结婚,回学校送给每个学妹几包口香糖做喜糖,室友觉得很奇怪:“哪有人用口香糖做喜糖的?” “有什么不可以,口香糖和结婚不是颇有类似之处吗?初时甜甜蜜蜜,久了就味同嚼蜡了! ”",
"poster": "",
"url": "http://www.laifudao.com/wangwen/81756.htm"
},
{
"title": "磁悬浮列车",
"content": " 黑蚂蚁与黄蚂蚁在公路上爬行,黑蚂蚁很快追到了前面的黄蚂蚁。 黑蚂蚁说:“蚂蚁老弟,你是拉黄包车的吗?” 黄蚂蚁说:“小样,那你说说你这是什么车?” 黑蚂蚁说:“我这可是黑色奔驰车,加长的那种。” 没多久,一条蛇呼啸而过。黄蚂蚁说:“你神气什么,你看到吗?那是磁悬浮列车。”",
"poster": "",
"url": "http://www.laifudao.com/wangwen/126841.htm"
},
{
"title": "那当初为什么要和我合影",
"content": " A:“既然不想在一起,那当初为什么要和我合影?” B:“我再TM警告你一遍!能不能不拿毕业照说事!”",
"poster": "",
"url": "http://www.laifudao.com/wangwen/99196.htm"
},
{
"title": "看看爸爸今天会编什么故事",
"content": " 『麻麻,我睡不着,你给我讲个故事好不好?』 『等你老爸回来听听他今天又会编什么故事就行了!』",
"poster": "",
"url": "http://www.laifudao.com/wangwen/70649.htm"
}
];
var html = '';
for(var i = 0; i < jsonData.length; i++)
{
var article = `
<li>
<h3>${jsonData[i].title}</h3>
<p>${jsonData[i].content}</p>
</li>
`;
html += article;
}
var news = document.getElementById('news');
news.innerHTML = html;
}
</script>
</head>
<body>
<ul id="news">
</ul>
</body>
</html>
谢谢