day27-web前端之常见事件类型

1节点

1.1拷贝节点

节点.cloneNode() -拷贝指定节点,产生新的节点(浅拷贝不会拷贝节点中的子节点)
节点.cloneNode(true) -拷贝指定节点,产生新的节点(深拷贝会拷贝节点中的子节点)

var div2Node=document.getElementById('div2')
var newDiv2Node=div2Node.cloneNode()
var newDiv3Node=div2Node.cloneNode(true)
div1Node.appendChild(div2Node)

1.2替换节点

父节点.replaceChild(新节点,子节点) - 使用新节点替换父节点中指定的子节点

var imgNode=document.createElement('img')
imgNode.src='img/thumb-2.jpg'
div2Node.replaceChild(imgNode,div2Node.firstElementChild)

2DOM属性操作

2.1属性的点语法操作

节点.属性-获取属性值;节点.属性=新值 - 修改属性的值

var imgNode=document.getElementsByTagName('img')[0]
var name='src'
imgNode.title='图片1'

2.2通过相应方法对属性进行操作

a.获取属性
节点.getAttribute(属性名)

var srcAttr=imgNode.getAttribute('src')
console.log(srcAttr)

b.给属性赋值
节点.setAttribute(属性名,值)

imgNode.setAttribute('title','picture one')

c.删除属性
节点.removeAttribute(属性)

var buttonNode=document.getElementsByTagName('button')[0]
//让按钮可以点击
buttonNode.disabled=''
//添加属性
buttonNode.ytindex=100
//删除属性
buttonNode.removeAttribute('ytindex')

3 BOM基础

3.1什么是BOM - 浏览器对象模型(browser object model)

js中提供了一个全局的window对象,用来表示当前浏览器
js中声明的全局变量,其实都是绑定在window对象中的属性(使用window的属性和方法的时候,前面‘window.’可以省略)

3.2window基本操作

a.打开新窗口

window.open('http://www.baidu.com')

b.关闭窗口

window.close()

c.移动当前窗口
窗口对象.moveTo(x坐标,y坐标)

window.moveTo(230,230)

<button onclick="windowAction()">打开窗口</button>
function windowAction(){ //通过点击创建窗口按钮来创建并移动调整一个新窗口的大小
    myWindow=window.open('','','width=200,height=300')
    myWindow.moveTo(300,300)
    window.focus()

d.调整窗口大小

myWindow.resizeTo(400,400)

e.刷新(窗口中没有内容,暂时看不到效果)
true ->强制刷新

window.reload(true)

f.获取浏览器的宽度和高度
innerWidth\innerHeight-浏览器显示内容部分的宽度和高度
outerWidth\outerHeight整个浏览器的宽度和高度

console.log(window.innerWidth,window.innerHeight)
console.log(window.outerWidth,window.outerHeight)

3.3弹框

a.alert(提示信息) - 弹出提示信息(带确定按钮)

window.alert('hello')

b.confirm(提示信息) - 弹出提示信息(带确定和取消按钮),返回值是布尔值,取消-false,确定true

result=window.confirm('是否删除')
console.log('=========:',result)

根据弹出的窗口选择是否删除标签的函数
function closeAction(){
    var result=window.confirm('是否删除')
    if( !result){
        return
    }
    var divNode=document.getElementById('div1')
    divNode.remove()
}

c.prompt(提示信息,输入框中的默认值) - 弹出一个带输入框和取消,确定按钮的提示框;

点取消返回值是null,点确定返回值是输入框中输入的内容
var result=window.prompt('message','default')
console.log(result)

4定时事件

4.1.setInterval(函数,时间) -

每隔指定的时间调用一次函数,时间单位是毫秒;返回定时对象
clearIntervar(定时对象) - 将到达指定时间的时间停止

    获取节点
var pNode=document.getElementById('time')
var num=0
    设置指定时间运行的函数
interval1=window.setInterval(function(){
    //这儿的代码每隔一秒执行一次
    num++
            将时间更新到浏览器上
    pNode.innerText=num
    if(num>=10){
          大于10就停止运行
        window.clearInterval(interval1)
    }
},1000)

4.2setTimeout(函数,时间)

隔指定的时间调用一次函数(函数只调用一次,就像定时炸弹)
clearTimeout(定时对象) - 停止定时

   过八秒就运行函数
var message='爆炸,嘣嘣嘣'
var timeout1=window.setTimeout(function(){
    console.log(message)
},8000)
停止运行函数
function clearBoom(){
    window.clearTimeout(timeout1)
}

5自动跳转

<body>
    <button>进入百度</button>
    <div id="box1">
        <p id="p1">5s后跳转到百度</p>
        <button id="button1" onclick="now()">now</button>
    </div>      
</body>
    获取节点
var p1Node=document.getElementById('p1')
var num=5
      定时
interval1=window.setInterval(function(){
    num--
            将变化的内容更新到屏幕上
    p1Node.innerText=num+'s后跳转到百度'
            跳转
    if(num<=0){
        window.open('http://www.baidu.com')     
                      终止事件
        window.clearInterval(interval1)
    }
    
},1000)
      手动选择跳转函数
function now(){
    window.open('http://www.baidu.com') 
    window.clearTimeout(interval1)
}

6事件

6.1事件三要素

事件三要素(事件源、事件、事件驱动程序)
点击按钮,就弹出一个弹框- 事件源:按钮,事件:点击,驱动程序:弹出弹框

6.2绑定事件

第一步:获取事件源
第二步:绑定事件
第三步:写驱动程序

6.2.1在标签内部给事件源的事件属性赋值

<标签 事件属性=‘驱动程序’></标签>
<标签 事件属性=‘函数名()’></标签>
注意:这个时候被绑定的驱动程序如果是函数,那么这个函数中的this关键字是window一般不用

6.2.2通过节点绑定事件1(会覆盖之前改变的属性)

标签节点.事件属性=函数
注意:这个时候函数中的this就是事件源

var btnNode=document.getElementById('btn2')
function changeColor(){
    console.log(this)
    btnNode.style.backgroundColor='skyblue'
}
btnNode.onclick=changeColor;

通过节点绑定事件2
标签节点.事件属性=匿名函数
注意:这个时候函数中的this是事件源

var btn3Node=document.getElementById('btn3')
btn3Node.onclick=function(){
    this.style.color='red'
}

6.2.3通过节点绑定事件3(不会覆盖之前修改的属性)

节点.addEventListener(事件名,函数) -指定的节点产生指定的事件后调用指定函数
事件名 - 字符串,去掉on
注意:这个时候函数中的this是事件源;这种方式可以给同一个节点的同一事件绑定多个驱动程序

var btn4Node=document.getElementById('btn4');
btn4Node.addEventListener('click',function(){
    this.style.color='yellow';
});

6.3获取事件对象

当事件的驱动程序是一个函数的时候,函数中可以设置一个参数,来获取当前事件的事件对象

var div1Node=document.getElementById('div1')
div1Node.onclick=function(evt){
    参数evt就是事件对象
    a.clientX/clientY- 事件产生的位置的坐标(相当于浏览器内容部分)
    
    console.log(evt.clientX,evt.clientY)
    console.log(evt.offsetX,evt.offsetY)
    if(evt.offsetX<100){
        this.style.backgroundColor='red'
    }else{
        this.style.backgroundColor='yellow'
    }
}

7常见事件类型

7.1 onload

onload - 页面加载完成对应的事件
window.onload=函数

7.2鼠标事件

onclik - 点击

7.3键盘事件

onkeypress - 按下弹起
onkeydown
onkeyup

7.4输入框内容改变

onchange - 输入框输入状态结束

 1.在页面加载完成后才去获取节点
  window.onload=function(){
    var pNode=document.getElementById('p1')
    console.log(pNode)}
  点击事件
pNode.onclick=function(){
    alert('被点击')
}

            pNode.onmouseover=function(){
                this.innerText='鼠标进入'
                this.style.backgroundColor='red'
            }
            pNode.onmouseout=function(){
                this.innerText='输入移除'
                this.style.backgroundColor='yellow'
            }
            pNode.onmousedown=function(){
                this.innerText='鼠标按下'
                this.style.backgroundColor='white'
            }
            pNode.onmouseup=function(){
                this.innerText='鼠标弹起'
            }
            pNode.onmousewheel=function(){
                this.innerText='滚轮滚动'
            }
            pNode.onkeypress=function(){
                this.innerText='键盘按下'
            }

    在输入框中将输入的字母的小写转为大写
var textareaNode=document.getElementsByTagName('textarea')[0]
textareaNode.onkeypress=function(evt){
    //键盘事件对象:key属性,keyCode属性-按键的值的编码
    alert('键盘按下')
    
    var keycode1=evt.keyCode;
    if(keycode1>=97&&keycode1<=122){
        keycode1-=32
    }
    textareaNode.innerText=String.fromCharCode(keycode1)

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,485评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,466评论 1 45
  • 2018.10.2 Tue. 带娃去滨河森林公园玩。跑完5km没有回车里穿外套。晚上有点低烧。
    hmisty阅读 89评论 0 0
  • 题记:“瘦影自临春水照,卿须怜我我怜卿”。 冯小青,名玄,字小青。明才女(据闻系《红楼梦》中林黛玉的原型) 茕对镜...
    呓籽阅读 307评论 1 1