BOM

一、BOM基础

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>dom操作</title>
    </head>
    <body>
        <button onclick="windowAction()">打开窗口</button>
        <div id="div1" style="height: 60px; background-color: salmon; width: 120px;" onclick="closeAction()">
            
        </div>
    </body>
</html>
<script type="text/javascript">
    //1.什么是BOM - 浏览器对象模型(browser object model)
    //js中提供了一个全局的window对象,用来表示当前浏览器
    //js中声明的全局变量,其实都是绑定在window对象中的属性(使用window的属性和方法的时候,前面'window.'可以省略)
    var a = 100;  //window.a = 100
    console.log(a, window.a)  
    //window.alert('你好!')
    //alert('你好!')
    //2.window基本操作
    //a.打开新窗口
    //window.open('http://www.baidu.com')  
    //b.关闭窗口
    //window.close()
    //c.移动当前窗口
    //窗口对象.moveTo(x坐标, y坐标)
    function windowAction(){
        myWindow = window.open('','','width=200,height=300')
        myWindow.moveTo(300, 300)
        //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.弹框
    //a.alert(提示信息) - 弹出提示信息(带确定按钮)
    //window.alert('alert弹出!')
    //b.confirm(提示信息) - 弹出提示信息(带确定和取消按钮),返回值是布尔值,取消-false, 确定-true
    //result = window.confirm('confirm,是否删除?')
    //console.log('======:',result)
    function closeAction(){
        var result = window.confirm('是否删除?')
        if(result==false){
            return
        }
        var divNode = document.getElementById('div1')
        divNode.remove()
    }
    //c.prompt(提示信息,输入框中的默认值) - 弹出一个带输入框和取消,确定按钮的提示框;
    //                                    点取消,返回值是null;点确定返回值是输入框中输入的内容
    var result = window.prompt('message', 'defalut')
    console.log(result)
    
</script>

二、定时事件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <p id="time">0</p>
        <button onclick="clearBoom()">拆炸弹!</button>
    </body>
</html>
<script type="text/javascript">
    //1.
    //setInterval(函数,时间) -  每隔指定的时间调用一次函数,时间单位是毫秒;返回定时 
    //clearInterval(定时对象) - 停止定时
    //1000毫秒 = 1秒
    var pNode = document.getElementById('time')
    var num = 0
    //开始定时
    var interval1 = window.setInterval(function(){
        //这个里面的代码每个1秒会执行一次
        num ++
        //console.log(num)
        pNode.innerText = num
        
        if(num == 10){
            //停止指定的定时
            window.clearInterval(interval1)
        }
    }, 1000)
    
    //2.
    //setTimeout(函数,时间) - 隔指定的时间调用一次函数(函数只会调用一次,就像定时炸弹)
    //clearTimeout(定时对象) - 停止定时
    var message = '爆炸!!!!!!!!!!!'
    var timeout1 = window.setTimeout(function(){
        console.log(message)
    }, 10000)
    
    function clearBoom(){
        //
        window.clearTimeout(timeout1)
        console.log('炸弹被拆除')
    }   
</script>

三、事件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #div1{
                margin-left: 100px;
                margin-top: 100px;
            }
        </style>
    </head>
    <body>
        <!--a.-->
        <div id="div1" style="width: 200px; height: 200px; background-color: yellowgreen;">
        </div>
        <button id="btn1" onclick="alert('弹框')">弹出弹框</button>
        <button id="btn11" onclick="showAlert()">弹出弹框2</button>
        <button id="btn2">改变背景颜色</button>
        <button id="btn3">改变字体颜色</button>
        <button id="btn4">改变样式</button>
        
    </body>
</html>
<script type="text/javascript">
    //js是事件驱动语言
    //1.事件三要素(事件源、事件、事件驱动程序)
    /* 例如:
     * 小明打狗,狗嗷嗷叫! --- 事件;在这个事件中狗是事件源, 狗被打就是事件,狗嗷嗷叫就是事件驱动程序
     * 小明打狗,他老爸就打他 --- 狗是事件源,狗被打是事件,小明被打是事件驱动程序
     * 点击按钮,就弹出一个弹框 - 事件源:按钮, 事件:点击, 驱动程序:弹出弹框
     */
    //2.绑定事件
    /*
     * 第一步:获取事件源
     * 第二步:绑定事件
     * 第二步:写驱动程序
     */
    //a.在标签内部给事件源的事件属性赋值
    //<标签 事件属性='驱动程序'></标签>
    //<标签 事件属性='函数名()'></标签>  - 一般不这样绑定
    //注意:这个时候被绑定的驱动程序如果是函数,那么这个函数中的this关键字是window
    function showAlert(){
        console.log(this)
    }
    //b.通过节点绑定事件1
    //标签节点.事件属性 = 函数
    //注意:这个时候函数中的this是事件源
    var btnNode = document.getElementById('btn2');
    function changeColor(){
        console.log(this)
        this.style.backgroundColor = 'skyblue'
    }
    btnNode.onclick = changeColor;
    
    //c.通过节点绑定事件2
    //标签节点.事件属性 = 匿名函数
    //注意:这个时候函数中的this是事件源
    var btn3Node =  document.getElementById('btn3');
    btn3Node.onclick = function(){
        this.style.color = 'red';
    }
    
    //d.通过节点绑定事件3
    //节点.addEventListener(事件名,函数) - 指定的节点产生指定的事件后调用指定函数
    //事件名 - 字符串,去掉on
    //注意:这个时候函数中的this是事件源; 这种方式可以给同一个节点的同一事件绑定多个驱动程序
    var btn4Node = document.getElementById('btn4');
    btn4Node.addEventListener('click', function(){
        this.style.color = 'yellow';
    });
    btn3Node.addEventListener('click', function(){
        this.style.backgroundColor = 'yellow';
    })
    //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);
        console.log(this.style.width)
        if(evt.offsetX < 100){
            this.style.backgroundColor = 'red';
        }else{
            this.style.backgroundColor = 'yellow';
        }
    }
    
    
</script>

四、常见事件类型


<!--
    常见事件类型
    1.onload - 页面加载完成对应的事件(标签加载成功)
    window.onload = 函数
    
    2.鼠标事件
    onclick - 点击
    onmouseover
    onmouseout
    ...
    
    3.键盘事件
    onkeypress - 按下弹起
    onkeydown
    onkeyup
    
    4.输入框内容改变
    onchange - 输入框输入状态结束
    
-->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            //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 = 'white';
                }
                //鼠标按下事件
                pNode.onmousedown = function(){
                    this.innerText = '鼠标按下';
                }
                pNode.onmouseup = function(){
                    this.innerText = '鼠标弹起';
                }
                
                pNode.onmousewheel = function(){
                    this.innerText = '鼠标滚动';
                    console.log('鼠标滚动')
                }
            }
            
            
        </script>
    </head>
    <body>
        <p id="p1" style="height: 200px;">我是段落</p>
        <textarea name="" rows="4" cols="100"></textarea>
        <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1544525699572&di=6bd446b73556fbdfd6407aaf22f428ee&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Fa%2F5842337e52dde.jpg"/>
    </body>
</html>
<script type="text/javascript">
    var textareaNode = document.getElementsByTagName('textarea')[0]
    textareaNode.onkeypress = function(evt){
        //键盘事件对象: key属性 - 按键的值, keyCode属性 - 按键的值的编码
        console.log(evt);
    }
    
    textareaNode.onchange = function(evt){
        alert('onchange事件')
    }
</script>

五、练习- 自动跳转

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
                position: relative;
            }
            #box1{
                width: 400px;
                height: 150px;
                background-color: lightcyan;
                margin-left: auto;
                margin-right: auto;
                border: 2px dotted lightgrey;
                display: none;
            }
            #box1 p{
                line-height: 70px;
                margin-left: 20px;
            }
            #box1 font{
                position: absolute;
                right: 20px;
                bottom: 15px;
                color: darkslateblue;
                text-decoration: underline;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <button onclick="showBox()">进入百度</button>
        <div id="box1">
            <p>5s后自动跳转到百度...</p>
            <!--<a href="http://www.baidu.com", target="_blank">马上跳转</a>-->
            <font onclick="jump()">马上跳转</font>
            
        </div>
    </body>
</html>
<script type="text/javascript">
    var box1Node = document.getElementById('box1');
    var pNode = box1Node.firstElementChild;
    function showBox(){
        if(box1Node.style.display == 'block'){
            return
        }
        //显示提示框
        box1Node.style.display = 'block';
        //开始倒计时
        var time = 5;
        interval1 = window.setInterval(function(){
            time--;
            pNode.innerText = time+'s后自动跳转到百度...'
            
            if(time === 0){
                //停止定时
                window.clearInterval(interval1)
                //打开网页
                window.open('https://www.baidu.com')
                //隐藏提示框
                box1Node.style.display = 'none'
                pNode.innerText = '5s后自动跳转到百度...'
            }
            
        }, 1000);
    }
    
    function jump(){
        //停止定时
        window.clearInterval(interval1)
        //打开网页
        window.open('https://www.baidu.com')
        //隐藏提示框
        box1Node.style.display = 'none'
        pNode.innerText = '5s后自动跳转到百度...'
    }
</script>

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

推荐阅读更多精彩内容