前端笔记 day4/5

对象

时间对象

内置操作 不需要插件-Date

	var date=newDate();
	date.getFullYear();//年
	date.getMonth()+1;//获取月份 取值为0-11 所以要+1
	date.getDate();//获取日期
	date.getDay();//获取星期
	date.getHours();//获取小时
	date.getMinutes();//获取分钟
	date.getSeconds();//获取秒

数学对象

Math 内置方法 不用引入插件

	Math.ceil(1.1); //向上取整
	Math.floor(1.9); //向下取整
	Math.round(1.5); //四舍五入
	Math.abs(-1);//绝对值
	Math.max(2,3,1,77,33,23); //取最大值
	Math.min(2,3,5,1,56); //取最小值
	Math.pow(2,4); //幂运算 2的4次方
	Math.sqrt(16); //开平方根
	Math.random(); //随机数 [0,1)

定时器

一旦开始 不会自己结束 需要手动设置停止

间歇定时器

每隔一段时间发生一次
使用场景: 轮播 倒计时

/*
	setInterval(function(){},时间ms为单位);
*/
setInterval(function(){
	console.log(11);
},500);

//清除定时器
clearInterval();
延时定时器

只发生一次
使用场景: 广告

/*
	setTimeout(function(){},时间ms为单位);
*/
setTimeout(function(){
	console.log('延时出现');
},500);

函数

function

封装 : 当功能反复使用时–便于使用
调用才能执行
声明式和表达式的区别: 声明式可以先声明再调用 也可以先调用再声明, 表达式只能先声明在调用 否则无效

	<script>
	//声明式
	function func(){
		console.log(11);
	}
	func();

	//表达式
	var fn=function(){
		console.log('function');
	}
	fn();
	</script>

参数

形参 实参
参数一一对应

<script>
	/*
		function fn(形参){
			操作;
		}
		fn(实参);
	*/
	function fn(a,b){
		console.log(a+b);
	}
	fn(2,5);
</script>

arguments : 类数组
可以拿到实参的集合

<script>
	function fn(){
		console.log(arguments[0]+arguments[1]);
	}
	fn(2,5);
</script>

闭包

函数套函数
全局变量:全局都可以读取修改
局部变量:在声明的作用域内有效 作用域外无效
缺点:会造成内存泄漏 不会被销毁

<script>
	function one(){
		var i=1;
		return function(){
			console.log(i++);
		}
	}

	var f = one();
	f();
	f();
//结果是1 2--因为是执行里边的函数
	one()();
	one()();
//结果是1 1--因为每次都是从头执行
</script>

BOM

浏览器对象模型
包含很多内置方法 事件,弹出框

<script>
	console.log(window);
</script>
	<button id="btn">btn</button>
	<button id="back">go back</button>
	<script>
		var btn=document.getElementById('btn');
		var back=document.getElementById('back');
		btn.onclick=function(){
			window.open('day2-8.html','_self');
			//open默认新页面打开 传_self参数只在当前页面打开 传_blank参数在新页面打开(默认)
		} 
		back.onclick=function(){
			//弹出框:alert prompt confirm
			history.go(1);//历史操作 可以执行上一步的操作 -n操作上n步 n操作下n步
			window.close();//close 关闭页面
			
			console.log(window.location);//查看地址信息
			window.location='day2-8.html';//location跳转 默认当前页面跳转
			window.navigator//查看浏览器信息
		}

	</script>

DOM

DOM 文档对象模型 document

获取元素

  • 通过id获取
document.getElementById("元素id");
  • 通过class类名获取
document.getElementsByClassName("类名");
  • 通过标签名获取
document.getElementsByTagName("标签名");

获取子元素

父元素.children

var box=documen.getElementById('box');
box.children //所有子标签
childNodes  //不常用 多一个文本节点

获取父元素

元素.parentNode

// 找有定位的父级元素 如果父级元素中都没有定位 则找到body
offsetParent

获取其他节点

firstElementChild //获取第一个子节点
previousElementSibling //获取上一个兄弟节点
nextElementSibling //获取下一个兄弟节点

删除节点

// remove
//元素.remove;

//removeChild  不常用
//元素.removeChild();

复制节点

cloneNode(true);
//传true:标签和内容一起复制
//不传/传false: 仅复制标签 不复制内容
//元素.cloneNode();

创建标签

document.createElement('标签');
document.createTextNode('');//创建文本 不常用
<body>
	<ul>
		<li>11</li>
		<li>22</li>
		<li>33</li>
	</ul>
	<button id="btn">appened</button>
	<script>
	var btn=document.getElementById('btn');
	var uls=document.getElementsByTagName('ul')[0];
	var lis=document.getElementsByTagName('li');
	btn.onclick=function(){
		var newLi=document.createElement('li');
		newLi.innerHTML='44';
		uls.appendChild(newLi);
		uls.insertBefore(newLi,lis[0]);//从中间插入(新标签,位置)
	}

	</script>
</body>

事件

常用事件

  • onclick()点击事件
  • onmouseover()鼠标滑过
  • onmouseenter()鼠标划入
  • onmouseout/leave()鼠标划出
  • onmousedown/up()鼠标按下/抬起
  • onmousemove()鼠标移动
  • ondblclick()鼠标双击事件
  • oncontextmenu()鼠标右键
  • onkeydown/up()键盘按下/抬起
  • onresize()窗口改变事件
  • onfocus()聚焦事件
  • onblur()失焦事件
  • onscroll()滚动事件

事件的冒泡和捕获

有层级关系,点击最里层元素, 外层元素的时间逐一发生

<style>
		#box1{
			width: 300px;
			height: 300px;
			background: red;
		}
		#box2{
			width: 200px;
			height: 200px;
			background: blue;
		}
		#box3{
			width: 100px;
			height: 100px;
			background: yellow;
		}
	</style>
	<div id="box1">
		<div id="box2">
			<div id="box3"></div>
		</div>
	</div>
<script>
	var box1=document.getElementById('box1');
	var box2=document.getElementById('box2');
	var box3=document.getElementById('box3');

	box1.onclick=function(){
		alert('box1');
	}
	box2.onclick=function(){
		alert('box2');
	}
	box3.onclick=function(){
		alert('box3');
	}
</script>

阻止冒泡[冒泡是默认的]
事件.stopPropagation(); —标准浏览器
事件.cancelBubble=true; —ie

捕获[需要设置]
在层级关系中,电机外层元素,里层元素事件逐一发生
事件绑定:addEventListener[事件监听] attachEvent()–ie没有捕获
普通的事件绑定 同个元素有多个同种事件类型,只有最后一个能生效
元素.addEventListener(‘事件类型’,‘函数名’,是否捕获-默认false冒泡 true捕获)

<script>//标准浏览器
	btn.addEventListener('click',one,false);
	btn.addEventListener('click',two,false);
	function one(){
		console.log(111);
	}
	function two(){
		console.log(222);
	}
</script>
<script>//IE
	btn.attachEvent('onclick',one);
	//区别:关键字不一样 值的个数不一样 事件类型书写方式不同
</script>

取消事件监听
[标准]removeEventListener(‘事件类型’,‘函数名’);
[IE]detachEvent(‘on事件类型’,‘函数名’);

取消默认行为
[标准]事件.preventDefault();
[ie]事件.returnValue= false;

<script>
document.oncontextmenu=function(ev){
		console.log(ev);
	}
</script>

面向对象

构造函数

特点:
函数名首字母大写
用this赋值
无需return
实例化新对象用new

<script>
function Fn(){
	this.a=10;
}
var newObj=new Fn();
</script>

原型prototype
对象:__proto__属性
函数:prototype原型 也有__proto__属性 因为函数就是对象
原型上的属性和方法是共享的

面向过程
面向对象

jQuery

引入方式:在线引入 本地引入

选择器

<script>
	$('div');
	$('.box');
	$('#box');
	$('#box p');
</script>
<script>
	$('ul li:eq(1)').css('background','red');//eq为下标 不支持[下标]
	$('ul li:first').css('background','red');//first选中第一个 last最后一个
	$('ul li:lt(2)').css('background','red');//lt下标小于2的 gt是大于
	$('ul li:odd').css('background','red');//odd下标为奇数的 even下标为偶数
	$('p[data=11]').css('color','blue');//通过p标签里的自定义属性data定位
</script>

DOM操作

<script>
//子元素:children
$('ul').children();

//父元素:parent()获取直系父元素  parents()获取祖先元素
$('p').parent();
$('p').parents('div');//可以具体找一个祖先

//兄弟标签
//div>p+span+ul
$('p').next().css('background','gold');//下一个兄弟元素
$('p').nextAll().css('background','gold');//所有下面的兄弟元素
$('p').prev().css('background','gold');//上一个兄弟元素
$('p').prevAll().css('background','gold');//所有上边的兄弟

//子孙元素
//div>p>a>span>b
$('div').find('b').css('background','red');//查找所有子孙元素 不包括它本身

</script>

实例:验证码-定时器
点名器-定时器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值