阶段03-JS进阶(总结02待补充)

82 篇文章 0 订阅
51 篇文章 0 订阅

5.BOM对象 面试官系列
一、是什么

BOM 浏览器对象模型,把浏览器当成一个对象看待,顶级对象是	window,是浏览器的一个实
例,提供操作浏览器的方法,其作用是跟浏览器做一些交互效果,比如如何进行页面的后退、前
进、刷新、浏览器的窗口发生变化,滚动条的滚动,以及获取客户的一些信息,如:浏览器品牌
版本、屏幕分辨率等。

浏览器的全部内容可以看作DOM,整个浏览器可以看成BOM,区别如下:

在这里插入图片描述


二、window

在浏览器中,window对象有双重角色,即是浏览器窗口的一个接口,又是全局对象
因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法

关于窗口控制方法如下:
moveBy(x,y):从当前位置水平移动窗体x个像素,垂直移动窗体y个像素,x为负数,将向左移动	窗体,y为负数,将向上移动窗体
moveTo(x,y):移动窗体左上角到相对于屏幕左上角的(x,y)点
resizeBy(w,h):相对窗体当前的大小,宽度调整w个像素,高度调整h个像素。如果参数为负值,将缩小窗体,反之扩大窗体
resizeTo(w,h):把窗体宽度调整为w个像素,高度调整为h个像素
scrollTo(x,y):如果有滚动条,将横向滚动条移动到相对于窗体宽度为x个像素的位置,将纵向滚动条移动到相对于窗体高度为y个像素的位置
scrollBy(x,y): 如果有滚动条,将横向滚动条向左移动x个像素,将纵向滚动条向下移动y个像素

window.open() 既可以导航到一个特定的url,也可以打开一个新的浏览器窗口
如果 window.open() 传递了第二个参数,且该参数是已有窗口或者框架的名称,那么就会在目标窗口加载第一个参数指定的URL
window.open('htttp://www.vue3js.cn','topFrame')
==> < a href=" " target="topFrame"></ a>
window.open() 会返回新窗口的引用,也就是新窗口的 window 对象
const myWin = window.open('http://www.vue3js.cn','myWin')
window.close() 仅用于通过 window.open() 打开的窗口
新创建的 window 对象有一个 opener 属性,该属性指向打开他的原始窗口对象

三、location

url示例:http://foouser:barpassword@www.wrox.com:80/WileyCDA/?q=javascript#contents

在这里插入图片描述
除了hash之外,只要修改location的一个属性,就会导致页面重新加载url!!!
location.reload(),此方法可以强制刷新当前页面。这个方法会根据最有效的方式
刷新页面,如果自上一次请求以来没有改变过,页面就会从浏览器缓存中重新加
载,如果强制从服务器重载,传递一个参数true即可。


四、navigator

navigator 对象主要用来获取浏览器的属性,区分浏览器类型。属性较多,且兼容性比较复杂
navigator.userAgent 浏览器UA设置,判断当前是哪种浏览器
navigator.onLine 当前设备是否在线

五、screen
在这里插入图片描述


六、history

history是浏览器记录当前标签页访问页面的对象 不记录跳转的网址;
history对象主要用来操作浏览器URL的历史记录,可通过参数向前,向后,或向指定URL跳转
1.history.go()
接收一个整数数字或者字符串参数:向最近的一个记录中包含指定字符串的页面跳转
history.go('maixaofei.com')
当参数为整数数字的时候,正数表示向前跳转指定的页面,负数为向后跳转指定的页面
history.go(3) //向前跳转三个记录
history.go(-1) //向后跳转一个记录
2.history.forward():向前跳转一个页面
3.history.back():向后跳转一个页面
4.history.length:获取历史记录数

1.url 统一资源定位符 标识一个网络资源的地址

包括:
协议protocol:  http/https  
主机地址host:
	-IP(主机地址 每一台电脑主机都有自己特定的标识,ipv4/ipv6)
	-域名(等同于IP地址,更易记忆) 通过DNS解析找到对应我的IP 找到对应IP主机下的文件 
	域名=服务器名(类似于学院名,区分域名对应的不同业务 www官网/mail邮箱)+主域(类似大学名)
端口号port:可以理解为窗口,主机之间互相交流的端口
	http  默认打开80端口
	https 默认打开443端口
源origin = 协议protocol+主机地host+端口号port
	如果两个url完全一致,两个页面同源
	有任意一个不一致,就是非同源

本地开启服务:
	vscode插件 live service 可以将vscode打开的文件根目录地址开启服务
	仅可以访问根目录上的文件
	默认三个本地IP(可以通过win+r->输入cmd ->ipconfig查看):
		127.0.0.1 自己的主机访问的服务地址,有一个对应的域名 localhost
		192.160.0.100 自己主机的ipv4地址 局域网IP,同一局域网下可以互相访问
		192.168.1.160 无线网的主机地址,同一无线网下可以互相访问
		(上述可使用前提:关闭防火墙)

路径path:访问主机分享文件的地址
	1.文件路径  用户直接访问主机分享的文件
	2.路由 目前比较流行的形式(后端监听地址访问事件:返回特点的内容)	
查询参数search:
	query 帮助用户访问到特定的资源 ?name=value
锚点fragment: #内容
url:协议 + 主机地址 + 端口号 + 可选【路径 + 参数 + 锚点】

2.open方法

一个参数:window.open(URL) 在新标签页面打开网址
两个参数:window.open(URL,windowName) 在windowName对应的窗口打开网址
	windowName可以是a的target属性值/自定义名/iframe的name属性
三个参数:window.open(URL,windowName[不能是自身],windowFeature[窗口特征])在新的浏览器窗口打开网址

4.location对象

location保存当前窗口正在打开的URL的对象
它既是 window 对象的属性,也是 document 对象的属性
(window.location === document.location)
location解析URL组成的对象
属性:
    href:当前页面的网址
    origin源 =protocol协议+hostname主机地址+port端口号
    search获取查询参数 ?name = value  ***(可用于页面传值)
    传值会有中文编码 效果等同于encodeURI(中文)
    可以通过decodeURI(编码)-->中文
    hash 获取锚点的值 #abc...
方法:
    location.assign(url) 作用同href,可以让页面跳转到指定的地方,后退按钮可用
    location.replace(url) 替换掉地址栏中的地址,但是不记录历史,也就是后退按钮不可用
    location.reload(是否强制刷新) true强制从服务器获取页面 false如果浏览器有缓存的话,直接从缓存获取页面

5.正则(了解)

正则表达式 用于匹配字符串中是否含有某个片段的规则
使用场景:
    1.字符串校验
    2.input值校验
    3.模板语法 
使用方式:ctrl c+v
声明方式:
    1.构造函数 new ExReg("匹配内容","属性i/g/m/y/u")
    2.自变量形式 /匹配内容/属性  [常用方式]
方法:
    正则对象.test(字符串) 返回字符串是否符合正则匹配规则,有true无false
    str.match(正则) 返回字符串中符合正则匹配规则的内容 是一个数组形式
    str.replace("正则",xxx)   

6.navigator对象

navigator  浏览器信息统计对象 
属性:
	navigator.userAgent 浏览器UA设置,判断当前是哪种浏览器
	navigator.onLine 当前设备是否在线

7.新动画

旧动画:以步长控制的动画,实现复杂的效果难以应付;
新动画:实现多样的动画效果,通过控制动画时长实现;
实现原理
已过时间       已过路程
------------ = ----------- =k
 总时长         总路程

function(){
    // 获取:已过时间 总时间 总路程
    // 声明起始时间
    var startTime = Date.now();
    // 声明总时间 动画持续时间duration
    var duration = 1000; //时间单位毫秒
    var timer = setInterval(function(){
        // 声明当前时间
        var now = Date.now();
        // 求出已过时间
        var passTime = now - startTime;
        // 求出比例
        var bite = passTime / duration;
        // 因为时间戳 剪出来的不一定是整数
        if(bite>1){
            bite = 1;
            clearInterval(timer);
        }
        // 求出已过路程的运动
        box.style.left = 50+600*bite+"px";
    },1000/60)
}

8.requestAnimationFrame()

var rid = requestAnimationFrame(function(time){})
意味着 在下次浏览器刷新的时候执行参数函数 function(time){}
当它开始自调用的时候 表示和浏览器刷新同频率的执行某个函数
参数time 表示从性能测量开始的时间戳==performance.now()
cancelAnimationFrame(rid) 可取消raf设定的动画,很少用

 //按照步长控制动画
function(){
     var rid = requestAnimationFrame(function move(){
         box.style.left = box.offsetLeft + 5 + "px";
         // 调用自身
         rid = requestAnimationFrame(move);
         // 到达指定位置,清除raf设定的动画
         if(box.offsetLeft >= 900){
             cancelAnimationFrame(rid);
         }
     })
}
// 按照动画时长控制动画
function(){      
    // 声明开始时间
    var startTime = performance.now();
    // 声明动画持续时间
    var duration = 2000;
    requestAnimationFrame(function move(now){
        // 声明当前时间
        // var now = performance.now();  //函数中默认一个参数now  相当于这句代码
        // 求出已过时间
        var passTime = now - startTime;
        // 求出比例
        var bite = passTime / duration ;
        if(bite>1){
            bite=1;
        }
        box.style.left = 50+600*bite +"px";
        // 只要没有到达指定位置就一直执行函数
        if(bite<1){
            requestAnimationFrame(move);
        }
    })
}

9.新动画封装函数

执行函数
function () {
        // box弓箭函数
        animate(2000, back, function (percent) {
            box.style.left = 50 + 600 * percent + "px";
        })
    }    
//时序函数
function back(bite) {
        return Math.pow(bite, 2) * (4 * bite - 3);
    }
//在animate函数中加入时间扭曲函数(timingFunction函数)
//使用回调函数将时序函数作为参数传入
function animate(duration, timingFn, callback) {
        // 声明开始时间
        var startTime = performance.now();
        requestAnimationFrame(function move(now) {
            // 求出已过时间
            var passTime = now - startTime;
            // 求出比例
            var bite = passTime / duration;

            if (bite > 1) {
                bite = 1;
            }

            // 要执行的动画过程
            callback(timingFn(bite));

            if (bite < 1) {
                requestAnimationFrame(move);
            }
        })
    }

6.H5&C3补充
7.Flex
8.jQuery
9.jQuery动画-补充
10.swiper插件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值