十七、BOM

1.BOM

  • 浏览器对象模型
  • BOM可以是我们通过JS来操作浏览器
  • 在BOM中为我们提供了一组对象,用来完成对浏览器的操作
  • BOM对象:
    Window
    - 代表的是整个浏览器窗口,同时window也是网页中的全局对象
    Navigator
    - 代表当前浏览器的信息,可识别不同浏览器
    Location
    - 代表当前浏览器的地址栏信息,可以获取地址栏信息,或者操作浏览器跳转页面
    History
    - 代表浏览器的历史记录,可以通过该对象来操作浏览器的历史记录
    由于隐私原因,该对象不能获取具体的历史记录,只能操作浏览器向前或向后
    而且该操作只在当次访问时有效
    Screen
    - 代表用户的屏幕信息,通过该对象可以获取到用户显示器的相关信息(移动端用的较多

1.1Navigator

  • 由于历史原因,Navigator里的大部分属性都已经不能帮助我们识别浏览器了
  • 一般会只有userAgent来判断浏览器的信息
    userAgent是一个字符串,这个字符串中包含用来面熟浏览器信息的内容
    在IE11中已经将微软和IE相关的标识都去除了
    通过UserAgent不能判断,还可以通过一些浏览器中特有的对象来判断
    比如:ActiveXObject
                var ua = navigator.userAgent;
                if(/firefox/i.test(ua)){
                    alert("你是火狐");
                }else if(/chrome/i.test(ua)){
                    alert("你是谷歌");
                }

1.2History

  • length
    - 属性,可以获取到当前访问的链接数量
  • back()
    - 可以用来回退到上一个页面,作用和浏览器的回退按钮一样
  • forward()
    - 可以跳转到下一个页面,作用和浏览器的前进按钮一样
  • go()
    - 可以用来跳转到指定页面
    - 需要一个整数作为参数
    1:表示向前跳转一个页面
    2:表示向前跳转量个页面
    -1:表示向后跳转一个页面
    -2:表示向后跳转量个页面

1.3Location

  • 该对象中封装了浏览器的地址栏信息
  • 如果直接打印location,则可以直接获取到地址栏的信息
  • 如果将location属性修改为一个完整的路径或相对路径,则我们页面会自动跳转到该路径,并生成相应的历史记录
  • assign()作用和直接修改location一样
  • reload()重新加载,作用和刷新按钮一样
    reload(true)表示强制清空缓存刷新,相当于ctrl+f5
  • replace()可以使用一个新的页面替换当前页面,不会生成历史记录

1.4window对象方法

  • setInterval()
    - 定时调用
    - 可以将一个函数,每隔一段时间执行一次
    - 参数:
    1. 回调函数,该函数每隔一段时间被调用一次
    2. 每次调用间隔的时间,单位是毫秒
    - 返回值:
    返回一个Number类型的数据
    这个数字来作为定时器的唯一标识

  • clearInterval()
    - 可以关闭一个定时器

  • setTimeout()
    - 延时调用
    - 延时调用一个函数,只会执行一次
    - 与定时调用可以互相代替

  • clearTimeout()
    - 用来关闭一个延时调用

轮播图练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        window.onload = function(){

            var img1 = document.getElementById("img1");
           
            
            var imgArr = ["./img/1.jpg","./img/2.jpg","./img/3.jpg","./img/4.jpg","./img/5.jpg"];
            
            var index = 0;
           
            var timer;
            


           //为btn01绑定一个单机响应函数
            var btn01 = document.getElementById("btn01");
            
            btn01.onclick = function(){
            
            //在开启定时器之前,需要将上一个定时器关闭
                clearInterval(timer);
                
            //开启一个定时器
                timer = setInterval(function(){
                
                index++;
                index %= imgArr.length;
                img1.src = imgArr[index];
                },100);
            };
            

            //为btn02绑定一个单机响应函数
            var btn02 = document.getElementById("btn02");
            //为btn01绑定一个单机响应函数
            btn02.onclick = function(){
                clearInterval(timer);
            };
        };
        /* 
        错误原因:给btn02绑定函数时错绑成了01,导致btn01的函数被重置
        */

    </script>
</head>
<body>
    <img id="img1" src="img/1.jpg"/>
    <br /><br />
    <button id="btn01">开始</button>
    <button id="btn02">停止</button>
</body>
</html>

移动div丝滑版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box1{
            width: 100px;
            height: 100px;
            background-color: #bfa;
            position: absolute;
        }
    </style>
    <script>

       window.onload = function (){


            var box1 = document.getElementById("box1");
            var speed = 10 ;//设置位移速度
            var dir = 0;
            
            var timer = setInterval(function(){
                switch(dir){
                    case "ArrowUp":
                    box1.style.top = box1.offsetTop-speed + "px";
                    break;
                    case "ArrowDown":
                    box1.style.top = box1.offsetTop+speed + "px"; 
                    break;
                    case "ArrowLeft":
                    box1.style.left = box1.offsetLeft-speed + "px";
                    break;
                    case "ArrowRight":
                    box1.style.left = box1.offsetLeft+speed + "px"; 
                    break;
                }
            },10)
            document.onkeydown = function(event){
                
               /*  if(event.key == "ArrowUp"){
                    box1.style.top = box1.offsetTop-10 + "px";  
                
                }else if (event.key == "ArrowDown"){
                    box1.style.top = box1.offsetTop+10 + "px";  
                } */
                //alert(event.key);//ArrowUp ArrowRight ArrowDown ArrowLeft
               
                if(event.ctrlKey){
                    //按下control 加速
                    speed = 50;
                }else{
                    speed = 10;
                }
                dir = event.key;


            }; 
            document.onkeyup = function(event){
                dir = 0;
            }

       };
       /* 
       给移动动作绑定一个定时器

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

推荐阅读更多精彩内容

  •   ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么...
    霜天晓阅读 877评论 0 0
  • ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 B...
    劼哥stone阅读 817评论 2 5
  • ECMAScript是JavaScript的核心,而BOM(浏览器对象模型,Browser Object Mode...
    海人为记阅读 178评论 0 0
  • 写在前面 相信学习前端的小伙伴应该都知道Javascript可以简单的分成两个部分,一个是JS基础的ECMAScr...
    我小时候很可爱阅读 369评论 0 4
  • BOM BOM 是指浏览器对象的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行交互的对象结构。BOM...
    GongShengM阅读 361评论 0 0