web前端练习29----Bom中,Navigator,loaction,history ,Screen,window及案例(滚动,刷新加载,传参)

Posted zhaihaohao1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web前端练习29----Bom中,Navigator,loaction,history ,Screen,window及案例(滚动,刷新加载,传参)相关的知识,希望对你有一定的参考价值。

BOM- 浏览器对象模型

- BOM可以使我们通过JS来操作浏览器

- 在BOM中为我们提供了一组对象,用来完成对浏览器的操作

- BOM对象:

1.Navigator- 代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器

2.Location- 代表当前浏览器的地址栏信息,通过Location可以获取地址栏信息,或者操作浏览器跳转页面

3.History- 代表浏览器的历史记录,可以通过该对象来操作浏览器的历史记录

              由于隐私原因,该对象不能获取到具体的历史记录,只能操作浏览器向前或向后翻页

              而且该操作只在当次访问时有效

4.Screen- 代表用户的屏幕的信息,通过该对象可以获取到用户的显示器的相关的信息

5.Window- 代表的是整个浏览器的窗口,同时window也是网页中的全局对象

这些BOM对象在浏览器中都是作为window对象的属性保存的,

可以通过window对象来使用,也可以直接使用

1.Navigator 识别不同浏览器

  通过 navigator.userAgent 判断浏览器类型

		<script type="text/javascript">
			/*
			 * Navigator
			 * 	- 代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器
			 * 	- 由于历史原因,Navigator对象中的大部分属性都已经不能帮助我们识别浏览器了
			 * 	- 一般我们只会使用userAgent来判断浏览器的信息,
			 * 		userAgent是一个字符串,这个字符串中包含有用来描述浏览器信息的内容,
			 * 		不同的浏览器会有不同的userAgent
			 * 
			 * 火狐的userAgent
			 * 	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
			 * 
			 * Chrome的userAgent
			 *  Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/52.0.2743.82 Safari/537.36
			 * 
			 * IE8
			 * 	Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
			 * 
			 * IE9
			 * 	Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
			 * 
			 * IE10
			 * 	Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
			 * 
			 * IE11
			 * 	Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
			 * 	- 在IE11中已经将微软和IE相关的标识都已经去除了,所以我们基本已经不能通过UserAgent来识别一个浏览器是否是IE了
			 */
			
			//alert(navigator.appName);
			
			var ua = navigator.userAgent;
			
			console.log(ua);
			// 通过正则表达式判断浏览器类型
			if(/firefox/i.test(ua))
				alert("你是火狐!!!");
			else if(/chrome/i.test(ua))
				alert("你是Chrome");
			else if(/msie/i.test(ua))
				alert("你是IE浏览器~~~");
			else if("ActiveXObject" in window)
				alert("你是IE11,枪毙了你~~~");
			
			
		</script>

2.Location - 该对象中封装了浏览器的地址栏的信息

2.1 location.href 可以实现页面的跳转并传参

//跳转,在路径中拼接参数
window.location.href = 'demo02.1.html?name=zhh';
//在新页面拿到url,并截取参数
window.location.href

location.href 等同于 location,例如:

//跳转,在路径中拼接参数
window.location = 'demo02.1.html?name=zhh';
//在新页面拿到url,并截取参数
window.location

2.2 location.assign("http://www.baidu.com");

- 用来跳转到其他的页面,作用和直接修改location一样

2.3 location.reload(true);

- 用于重新加载当前页面,作用和刷新按钮一样

- 如果在方法中传递一个true,作为参数,则会强制清空缓存刷新页面

2.4 location.replace("01.BOM.html");

- 可以使用一个新的页面替换当前页面,调用完毕也会跳转页面

不会生成历史记录,不能使用回退按钮回退

2.5 location的其它常用属性

        // 拿到整个网址,可以截取后面的参数
        let url = window.location.href;
        console.log(url);
        
        // 获取主机加端口号
        let host = window.location.host;
        console.log(host);
 
        // 获取主机
        let hostName = window.location.hostname;
        console.log(hostName);
 
        // 获取端口号
        let port = window.location.port;
        console.log(port);
 
        // 获取协议
        let xieyi = window.location.protocol;
        console.log(xieyi);
 
        // 获取路径
        let pathName = window.location.pathname;
        console.log(pathName);
 
        // 片段标识符,可以判断网页状态
        let hash = window.location.hash;
        console.log(hash);
        
        // 返回网址问号后面的字段
        let ziduan = window.location.search;
        console.log(ziduan);

3.History- 对象可以用来操作浏览器向前或向后翻页

history.forward(); - 可以跳转下一个页面,作用和浏览器的前进按钮一样

history.back();  - 可以用来回退到上一个页面,作用和浏览器的回退按钮一样

history.go(整数);

- 可以用来跳转到指定的页面

 - 它需要一个整数作为参数

history.go(1):表示向前跳转一个页面 相当于forward()                 
history.go(2):表示向前跳转两个页面
history.go(-1):表示向后跳转一个页面
history.go(-2):表示向后跳转两个页面

4.Screen 不常用这里不讲了,用的时候自己去查文档

5.Window 对象

5.1 window 对象的延时执行函数 

setInterval();

clearInterval();

setTimeout();

clearTimeout()     

具体参考另外一篇文章:

https://blog.csdn.net/zhaihaohao1/article/details/102593574

5.2 window 对象的提示框

5.2.1 警告框对话框

window.alert('出问题了');

5.2.2 选择对话框

            let istrue = window.confirm('是否正确');
            if (istrue) 
                console.log('正确');
             else 
                console.log('错误');
            

5.2.3输入对话框

            // 拿到输入的内容
            let content = window.prompt('请输入内容', 'zhhhh');
            console.log(content);

5.3 三个监听事件

5.3.1 window.onload 等整个Dom执行完在触发

window.onload = function ()

5.3.2 window.onscroll 滚动事件,监听浏览器的滚动

这个事件很重要,可以实现 上拉加载,下拉刷新 等重要功能      

和浏览器相关的几个高度  https://blog.csdn.net/qq_35430000/article/details/80277587

window.onscroll = function()

5.3.3 window.onresize 监听浏览器可视化窗口的变化

window.onresize = function ()

6三个练习案例

6.1案例:左右联动

左边滑动,右边的按钮变色,点击右边的按钮,左边对应滑动

效果图:

实现思路:

监听滚动事件,window.onscroll = function ()

设置顶部被隐藏的高度 window.document.body.scrollTop

代码如下:

<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * 
            margin: 0px;
            padding: 0px;
        
    </style>
</head>
 
<body>
 
    <div style="height: 2800; width: 100%;">
        <div style="height: 700; width: 100%;background-color: brown;"></div>
        <div style="height: 700; width: 100%;background-color: darkblue;;"></div>
        <div style="height: 700; width: 100%;background-color: darkgreen;"></div>
        <div style="height: 700; width: 100%;background-color: gold;"></div>
    </div>
    <div
        style="height: 120px;width: 100px; background-color: lightblue; position: fixed;right: 0;top: 200px;z-index: 1;">
        <div id="button1" style="line-height: 30px;width: 100%;text-align: center;background-color: red;">区域1</div>
        <div id="button2" style="line-height: 30px;width: 100%;text-align: center;">区域2</div>
        <div id="button3" style="line-height: 30px;width: 100%;text-align: center;">区域3</div>
        <div id="button4" style="line-height: 30px;width: 100%;text-align: center;">区域4</div>
 
    </div>
 
    <script>
        let button1 = document.getElementById('button1');
        let button2 = document.getElementById('button2');
        let button3 = document.getElementById('button3');
        let button4 = document.getElementById('button4');
        // 监听滚动事件,window.onscroll = function ()
        // 设置顶部被隐藏的高度 window.document.body.scrollTop
        window.onscroll = function () 
            // 顶部被隐藏的高度
            let tophideheight = window.document.body.scrollTop;
            console.log(tophideheight);
            setColor();
           
            button1.onclick = function () 
                window.document.body.scrollTop = 0;
                setColor();
            
            button2.onclick = function () 
                window.document.body.scrollTop = 700;
                setColor();
            
            button3.onclick = function () 
                window.document.body.scrollTop = 1400;
                setColor();
            
            button4.onclick = function () 
                window.document.body.scrollTop = 2100;
                setColor();
            
 
 
 
            function setColor() 
                if (tophideheight < 700) 
                    button1.style.backgroundColor = 'red';
                 else 
                    button1.style.backgroundColor = 'lightblue';
                
 
                if (tophideheight >= 700 && tophideheight < 1400) 
                    button2.style.backgroundColor = 'red';
                 else 
                    button2.style.backgroundColor = 'lightblue';
                
 
                if (tophideheight >= 1400 && tophideheight < 2100) 
                    button3.style.backgroundColor = 'red';
                 else 
                    button3.style.backgroundColor = 'lightblue';
                
 
                if (tophideheight >= 2100 && tophideheight < 2800) 
                    button4.style.backgroundColor = 'red';
                 else 
                    button4.style.backgroundColor = 'lightblue';
                
 
            
 
 
 
 
        
 
 
    </script>
 
 
 
 
 
</body>
 
</html>

6.2案例:列表的下拉刷新和上拉加载

这个例子的兼容性不好,有些浏览器没效果, 兼容性好的参考

https://blog.csdn.net/zhaihaohao1/article/details/102983531

效果图:

       开发思路:

        1监听滚动事件 window.onscroll = function ()  

        2判断滑动到顶部时刷新数据  document.body.scrollTop = 0

        3判断滑动到底部时加载数据

        可见高度

        let clientHeight = document.body.clientHeight;

        全文高度(包括不可见部分的高度)

        let scrollHeight = document.body.scrollHeight;

        顶部被遮住部分的距离

        let scrollTop = document.body.scrollTop;

        判断滑动到底部(有时候有一点误差,根据实际需要判断)

        scrollHeight = scrollHeight+scrollTop;

代码:
 

<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * 
            margin: 0px;
            padding: 0px;
        
        
        #title 
            position: fixed;
            left: 0;
            top: 0;
            width: 100%;
            line-height: 50px;
            text-align: center;
            background-color: yellow;
        
        
        #list 
            margin-top: 50px;
        
        
        .item 
            border-bottom: 1px solid red;
            line-height: 40px;
            text-align: left;
            padding-left: 10px;
        
    </style>
</head>
 
<body>
    <div id="title">测试</div>
    <div id="list">
        <p id="head" class="item">刷新。。。</p>
        <div id="listContent">
 
 
        </div>
        <p id="foot" class="item">加载中。。。</p>
    </div>
    <script>
        // bom相关
        // 刷新时的数据
        let arrayRefresh = ['zhh1', 'zhh2', 'zhh3', 'zhh4',
            'zhh5', 'zhh6', 'zhh7', 'zhh8', 'zhh9', 'zhh10',
            'zhh11', 'zhh12', 'zhh13', 'zhh14', 'zhh15', 'zhh16',
            'zhh17', 'zhh18', 'zhh19', 'zhh20', 'zhh21', 'zhh22',
            'zhh23', 'zhh24', 'zhh25', 'zhh26', 'zhh27', 'zhh28',
            'zhh29', 'zhh30'
        ];
        // 加载时的数据
        let arrayLoad = [...arrayRefresh];
        let head = document.getElementById('head');
        let foot = document.getElementById('foot');
        // 隐藏刷新和加载数据的 p 元素
        head.style.display = "none";
        foot.style.display = "none";
        // 渲染数据
        drawData(arrayRefresh);
        // 顶部隐藏高度要设置,否则无法下拉刷新
        document.body.scrollTop = 1;
        window.onscroll = function() 
                //文档高度
                let scrollHeight = document.body.scrollHeight;
                // 可见高度
                let clientHeight = document.body.clientHeight;
                // 滚动高度(就是顶部隐藏的高度)
                let scrollTop = document.body.scrollTop;
                // 到顶部了
                if (scrollTop == 0) 
                    head.style.display = "block";
                    console.log('到顶部了');
 
                    listContent.innerHTML = '';
                    // 渲染数据
                    drawData(arrayRefresh);
                    // 重新设置加载的数据
                    arrayLoad = [];
                    arrayLoad = [...arrayRefresh];
                    setTimeout(function() 
                        // 隐藏头
                        head.style.display = "none";
                        // 设置向上隐藏的高度是1,可以继续刷新
                        document.body.scrollTop = 1;
                    , 500);
 
 
                
                
                let chaAbs = Math.abs(scrollHeight-(clientHeight + scrollTop));
                
                
                // 到底部了
                if (chaAbs<0.5) 
                    console.log('到底了...');
                    console.log(chaAbs);
                    
                    foot.style.display = "block";
                    setTimeout(function() 
                        listContent.innerHTML = '';
                        arrayLoad.push('新加的数据');
                        drawData(arrayLoad);
                        console.log(arrayLoad.length);
                        
                    , 500);
                
 
            
            //渲染数据,写个函数
        function drawData(array) 
            for (let index = 0; index < array.length; index++) 
                let p = document.createElement('p');
                p.className = 'item';
                p.innerText = array[index];
                listContent.appendChild(p);
 
            
 
        
    </script>
 
</body>
 
</html>

参考文章:

https://blog.csdn.net/money_oriented/article/details/80323965
https://blog.csdn.net/qq_35430000/article/details/80277587

6.3案例:页面的跳转并传递参数:

效果图:

开发思路

        在 example3.html 中要转网页,并传参

        window.location.href = 'example3.1.html?name=zhh';

        在 example3.1.html 中拿到路径,并截取参数

        let url = window.location.href;

代码:

example3.1.html中传数据:

<html lang="zh-CN">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
 
<body>
    <button id="button">跳转并传参</button>
    <!-- 网页跳转并传参 -->
    <script>
        /* 
        在 example3.html 中要转网页,并传参
        window.location.href = 'example3.1.html?name=zhh';
        在 example3.1.html 中拿到路径,并截取参数
        let url = window.location.href;
        
        
         */
        let button = document.getElementById('button');
        button.onclick = function()
        //在第一个 跳转到第二页并在后面拼接参数
        window.location.href = 'example3.1.html?name=zhh';
        
 
 
    </script>
 
</body>
 
</html>

example3.1.html 中接收数据

<html lang="zh-CN">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
 
<body>
    <div></div>
    <script>
        //拿到全路径,并截取里面的参数
        let url = window.location.href;
        console.log(url);// http://127.0.0.1:5500/example3.1.html?name=zhh
 
        // 截取参数
        let name = url.split('?')[1];
        console.log(name);// name=zhh
 
        // 再根据等号截取
        let nameValue = url.split('=')[1];
        console.log(nameValue); // zhh
 
        document.getElementsByTagName('div')[0].innerText=name;
 
 
 
 
 
    </script>
</body>
 
</html>

 

 

 

 

以上是关于web前端练习29----Bom中,Navigator,loaction,history ,Screen,window及案例(滚动,刷新加载,传参)的主要内容,如果未能解决你的问题,请参考以下文章

周末web前端练习

好程序员web前端教程分享前端javascript练习题

几道web前端练习题目

1+x 证书 Web 前端开发 php 专项练习

好程序员web前端教程分享前端javascript练习题之promise

好程序员web前端分享前端javascript练习题一