JavaScript学习笔记(3)

1.鼠标

 onmousedown事件,鼠标按下时触发;

ondmouseup.鼠标抬起时触发;

这里onmousedown等事件其实是dom对象event的属性,event代表的就是事件的信息,

如果是绑定事件,可以直接用event的属性进行绑定,如果要读事件的信息,就需要手动调用event的属性;

也就是说各个元素的事件属性不是由window提供的,而是由event对象提供的(其实是手动添加了具体对象的事件属性,因为event是内置对象,所以它的属性就变成了关键字之类的东西,无论在哪可以自动识别,具体对象与event无继承关系)

如果在事件函数设置一个参数,浏览器就会把event对象传过来;

2.键盘

键盘事件一般绑定给可以获取焦点的对象或者document对象(只有当获取鼠标焦点时才会触发)

onkeydown

当down事件被连续触发时,第一次和第二次的时间较长,其他较快,是为了防止误操作;

在文本框中输入内容是其onkeydown的默认行为,如果取消了其默认行为,也就是return false后,就无法再去输入内容了;

如果在表单框中,

onkeyup

 up事件不会连续触法,松开就是触发一次;

event有keycode属性,返回被按下键的编码;

此外还有ctrlkey.shiftkey,altkey等属性判断是否按下;

********************************************************************************************************************************************************

BOM对象(浏览器提供,有windows,navigator,history,location,而它们又都是window的属性,可以直接用也可以通过window调用)

3.Navigator(浏览器提供的,代表当前浏览器信息的对象)

appname返回浏览器名称不可用

useragent属性是浏览器相关信息,可以用正则表达式对其利用来判断浏览器;

但要是判断ie浏览器还是困难;

可以用window.ActiveXObjet方法来判断是否是ie浏览器(只有ie有,但ie11无效)

此时用in关键字"ActiveXObjet" in window来判断ie(自动返回真假);

4.History(代表浏览器的历史记录,只能向前或者向后翻页且只在当次访问时有效)

属性:length 当前已访问的网页

方法:back()跳到前一个页面

forward()跳到后一个页面

go()参数表示跳转的页面数,1表示前进1,-2表示回退2;

注意:前进后退操作的历史记录是按照访问该网站时的顺序来排的;

5.Location(代表当前浏览器地址栏信息的对象)

直接打印的话是当前网页的完整路径

也可以对其修改,这样它在修改完时会自动跳转网页并且修改路径

方法:assign()跳转到其他页面,和直接修改地址作用一样;

reload()用于重新加载页面,作用和手点刷新,如果传入true会变成强制清空缓存刷新

replace()用新页面代替原来页面,不会生成历史记录;

6.定时器(从属于window)

(1.)设置定时器:window方法setInterval(函数,时间单位ms),会返回定时器的编号,属于定时调用;

(2.)设置延时调用:window方法settimeout(函数,时间),会在一段时间后只调用一次,也会返回定时器编号;

(3.)clearInterval()传入定时器编号来清除定时器;

*****************************************************************************************************************************************************************************************

7.JSON(JS对象表示法)

基础数据所有语言都认识,但是JS的对象只有自己认识,其他语言不认识;

此时要把对象转换成字符串,

JSON就是一种特殊的字符串,这个字符串可以被任意语言识别,并且可以转换为其他语言的对象,JSON在开发中常用于数据交互;

JSON中允许的值有:字符串,数值,布尔值,null,对象,数组但是没有函数;

JSON对象的属性必须要加引号,且本身也要加引号,确保是字符串的类型;

JSON分类:1.对象"{}" 2.数组"[]"

将JSON格式对象转换为JS中的对象,

利用的是工具类叫JSON,这个对象既可以把对象转成JSON,也能把JSON转为对象;

*********************************************************************************************************************************************************************************************************************************************

(这里我想到了一个问题:究竟这工具类的方法和属性到底是调用的谁的,我手动实验了一下,函数是不能自己手动添加独自属于函数的属性和方法的,也就是说不能通过函数去调方法(除了一些系统设定好的属性方法),

函数内的方法多是this.xx=xxx,不是独属于自身的属性,而是给它的实例对象准备的属性;因此如果是要调方法的话,一般就是调用实例对象的方法(虽然起源是构造函数)

拿JSON这个工具类举例子,调用JSON的方法时,实际上是调用的JSON类的实例对象JSON(同名)的方法)

*********************************************************************************************************************************************************************************************************************************************

关于JSON的方法:

JSON.parse()将JSON字符串作为参数,会将该字符串改为JS对象;

JSON.stringify()将JS对象作为参数,会将该JS对象转换为JS字符串;

全局的方法eval()传入js代码字符串形式的参数,可以自动执行并且返回结果(如果传一个对象,带有{}则会被当成代码块,可以'({})'加一个括号来解决);

但eval因为太强大,具有安全隐患;

IE7及一下浏览器没有JSON操作,可以引入Json文件来处理;

(JSON主要是用于普通数据的交互,但没有涉及代码的交互(也就是函数),这一点在json没有函数分类和函数值的身上可以体现,老师的说法是函数只能js自己解析,不能用于交互;但js也提供了全局的方法eval来处理代码的交互)

这里提出一个观点:不同语言的代码是不共通的,只有普通数据共通;也就是说根本上函数无法在不同语言中传递;

8.类的操作

为了避免在js中修改样式时(内联),样式和行为相耦合,而且在js中通过style中修改样式,每修改一次就要重新渲染,性能较差也不方便;

可以通过修改类名来修改样式;

通过改变元素对象独有的classname属性来改变样式,

classname+=" "+新的类名,这样做的好处是一个元素有两个类名,相同的不会变,而不同的属性,后面会覆盖掉前面(相当于有几个类,就渲染了几遍)

但这样最好在前面加一个判断,看这个类名是否在里面,然后再加入,否则会出现类名重复的问题,浪费内存(可以用正则表达式);

如果要删除一个类名,可以用字符串的replace方法结合正则表达式;

至此可以设计出一个工具类 (hasclass,removeclass,addclass都是自己建的)

function toggleclass(obj,cn)

{

if(hasclass(obj,cn))

{remove class(obj,cn)}
else{addclass(obj,cn)}

}

 

posted @ 2022-04-12 16:31  小炒肉--  阅读(12)  评论(0编辑  收藏  举报