Web APIs DOM基础知识以及小应用

1.按钮属性

let btn=document.getElementById('btn1');

禁用:值为布尔值,true为禁用,false为可用

btn.disabled=true;

中:值为布尔值,true为被选中,false为非选中

btn.checked=false;

2.函数整理

①申明函数,具名函数

function  fun(){  };

fun();

函数自己不会执行,必须调用才可以执行,调用函数的方式,就在函数后面加()

匿名函数(表达式函数)

注意:函数其实也是数据,也是值(表达式函数,函数的表达式形式)

let  fn=function( a,b) { }

定义函数的参数是形参,调用函数的参数是实参

返回值是把这个值返回到调用函数的位置,如果return后面不写值,就会返回undefined,如果函数不写return,那么函数在执行完所有代码之后会把undefined返回

③自调用函数,当函数执行的时候,会开辟新的作用域空间,这个函数里面的变量是局部变量,不可以拿到外面使用

; function() {}  )()

3.高阶函数与回调函数

别的函数当参数的函数是高阶函数

别的函数当参数的函数是回调函数

使用场景:给定时器当参数

setInterval(  function( ) { } , 1000 )

4.环境变量this

每个函数中都有this,函数中的this指向调用者

5.事件监听-----addEventListener

①要给谁监听事件就要先获取谁

②监听事件:事件源,事件类型,事件处理函数

(  事件类型是用户做的动作:click、dbclick、mouseover、mouseout......,

    事件源.addEventListener(' 事件类型 ',function(){ })    )

6.事件处理函数里面的this

this指向当前事件源

验证

7.获取元素的方法

选择器:获取元素

获取个:document.querySelector('选择器');

获取个:document.querySelectorAll('选择器');

8.样式案例

①只让当前元素有背景颜色,其他的不准有背景颜色

排他思想:在给当前元素设置样式之前,先把所有的元素的背景清除,最后再给当前这个元素加背景

案例----排他思想

9.行内事件

在模板中直接添加事件

  <input type="button" value="点击" onclick="fn(123)">

10.DOM0和DOM2事件

①DOM0:同类型的事件只能有一个,后面的会覆盖前面的执行函数,元素.onclick = function () {}

btn.onclick = function () {

      console.log('很多代码');

    }

移除事件

btn.onclick = null;

②DOM2:同类型的事件可以绑定多个,每个执行函数都会被执行,元素.addEventListener('click', function () {});,写法如下

btn.addEventListener('click', function () {});

移除事件:如果事件监听移除事件,那么事件函数必须有名字,没有名字无法移除这个事件

① let f1 = function () {

      console.log('a');

    };  // 函数命名

② btn.addEventListener('click', f1);// 监听点击事件

③ btn.removeEventListener('click', f1);//移除点击事件

11.事件对象

如何使用事件对象?只需要在回调函数写一个形参,通常由e,ev,event来表示。

事件类型:e.type

获取鼠标位置

e.clientX/clientY------鼠标相对于可视窗口的位置

e.pageX/pageY------鼠标相对于文档的位置

e.offsetX/offsetY------鼠标相对于当前元素的位置

12.函数的递归

递归是函数的高级用法,本质上是函数自已调用自已,它的行为非常类似循环,如果一个函数内部调用自已本身,并且通过条件控制避免陷入死循环,那么我们称这个函数为递归函数。

它的三个特性:重复执行,调用自身,必须要有条件控制,避免死循环

练习

1.求任意一个数的阶乘?(6的阶乘等于  6*5*4*3*2*1;)

function  jc( n ) {

  if( n=1 ) {return 1}

  return n*  jc(n-1);}

2.求兔子数列:1、1、2、3、5、8、13、21、34,第n个月有多少对兔子?(递归点:每个月的兔子数都是前两个月的兔子数相加。出口点:第一个月和第二个月的兔子数都是1)

案例执行代码

13.节点操作

插入节点

先创建一个想要插入的节点,通过creatElement

let  newLi=document.creatElement('li');

插入这个创建的li节点到ul中,有两种方式

①父元素.appendChild(新的元素)------appendChild:往父元素的内部的 ul.appendChild(newLi);

②insertBefore:父元素.inserBefore(新, 旧);往父元素的内部的某个元素前面插入元素

  ul.insertBefore(newLi, li2);

删除节点------removeChild

替换节点------replaceChild

14.输入事件

输入时候触发的事件:input

打印this.value值为每次输入时输入框的内容

15.节点关系

获取节点

父节点:子节点.parentNode;

img.parentNode.parentNode.parentNode

所有子节点:父节点.childNodes

box.childNodes[0]

元素子节点:父节点.children

box.children

第一个子节点:box.firstChild

第一个元素子节点: box.firstElementChild

最后一个子节点: box.lastChild

最后一个元素子节点: box.lastElementChild

下/上一个元素兄弟: nextElementSibling/previousElementSibling

img.nextElementSibling / previousElementSibling

下/上一个兄弟:nextSibling/previousSibling

img.nextSibling / previousSibling

16.事件流

事件流指的是事件完整执行过程中的流动路径,假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段(默认存在的),捕获阶段是 从父到子 冒泡阶段是从子到父

①事件冒泡是默认存在的, 它指的是:当一个元素触发事件后,会依次向上调用所有父级元素的同名事件事件捕获需要写对应代码才能看到效果

②addEventListener第三个参数传入true代表是捕获阶段触发(很少使用), 若传入false代表冒泡阶段触发,默认就是false,若是用 L0 事件监听,则只有冒泡阶段,没有捕获

元素.addEventListener( '事件类型',回调函数,true )  ;//捕获阶段

③阻止事件流动

因为默认就有冒泡模式的存在,所以容易导致事件影响到父级元素

若想把事件就限制在当前元素内,就需要阻止事件流动

阻止事件流动需要拿到事件对象

此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效

事件对象.stopPropagation( )

( ➢ mouseover 和 mouseout 会有冒泡效果

➢ mouseenter 和 mouseleave 没有冒泡效果(推荐) )

17.事件委托

事件委托是利用事件流的特征解决一些开发需求的知识技巧

➢ 事件委托其实是利用事件冒泡的特点,给父级元素加事件

事件对象.target 可以获得真正触发事件的元素

动态创建的元素要事件委托,e.target能找到目标元素

18.事件

scroll:滚动条发生滚动的时候触发的事件,如果整个窗口都带有滚动条,那么就把这个事件借给window

resize:窗口尺寸发生改变时触发的事件

load:资源加载完成之后触发的事件

window.addEventListener('load', function () {

      console.log('页面加载完成');

    });

①滚动事件:window.onscroll = function () {}

②尺寸改变事件:window.onresize = function () {}

③加载事件:window.onload = function () {}

19.节点大小(设置要加单位)

元素.clientWidth、元素.clientHeight------用于获取元素大小:包含的是width+padding(获取的是数字类型的结果,注意,不可以设置,只能用来获取

元素.offsetWidth、元素.offsetHeiht------用来获取元素大小:包含的是width+padding+border

元素.scrollWidth、元素.scrollHeight------ 用来获取元素大小:包含:width+padding+溢出

20.元素的位置(设置时要加单位)

offsetLeft、offsetTop:参照定位父

offsetParent:返回第一个定位的祖先元素

元素.scrollTop、元素.scrollLeft:节点卷起位置,动态获取元素滚动的位置, 允许被赋值动态改变元素的滚动位置,这个属性可以设置

getBoundingClientRect :获取相对于浏览器窗口左上角的位置及元素的大小

clientLeft / clientTop: 指的是边框的宽度

设置

  div.style.left = left + 'px';


应用:拖拽练习

①获取移动的元素

let div = document.querySelector('div');

②鼠标按下时记录鼠标相对于元素的位置

记录 鼠标相对于元素的位置

③鼠标松开,移除mousemove事件

移除mousemove事件

④设置元素的left和top实现元素的移动

元素的left是由鼠标相对于浏览器可视窗口的clientWidth与鼠标相对于元素的offsetWidth的差得来,top值同理,这里做了当元素的left与浏览器之间宽度小于30px,元素自动吸边功能,如果

实现逻辑
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容