草庐IT

day 8 Bom浏览器对象模型

jxooooolxe 2023-03-28 原文

BOM

BOM的概述:

bom 称为浏览器对象模型(bowser object model),也就意味他可以获取浏览器上的所有内容以及相关的操作。BOM缺乏规范的,存在共有对象来解决这个问题,但是共有对象也存在兼容问题(ie10以后)

BOM的结构

 

window

概述: window是顶层对象 属于golbal对象。他是所有全局变量的父亲。

相关方法
打印方法
// window //对象
console.log(window); //window 对象 Window的构造函数
//常用的弹窗方法及打印方法
window.console.log('hello') //console.log() window可以省略的
console.log('日志') //控制台  log日志 以日志的形式打印
console.error('错误') //以错误的形式打印
console.warn('警告') //以错误的形式打印
console.debug('测试') //以错误的形式打印
console.info('信息提示') //以错误的形式打印

弹窗方法

//弹窗
window.alert('hello') //弹提示窗
var isTrue = confirm('你确认要删除吗') //交互框  true确认 false取消 返回
console.log(isTrue);
var str = prompt('请输入你的手机号') //输入框 他会有个输入框让你输入返回对应的你输入的内容 (string的内容)
console.log(str);

打开关闭方法

//打开 open 关闭 close
// 第一个参数是url地址 第二个参数为title target(打开方式 _blank _self _parent) 第三个参数为设置的参数(窗口的高度 宽度等等)
window.open('http://www.baidu.com','_blank','width=300,height=100,top=0,left=0')
//  height=100 窗⼝⾼度;
//   width=400 窗⼝宽度;
//   top=0 窗⼝距离屏幕上⽅的象素值;
//   left=0 窗⼝距离屏幕左侧的象素值;
//   toolbar=no 是否显⽰⼯具栏,yes为显⽰;
//   menubar,scrollbars 表⽰菜单栏和滚动栏。
//   resizable=no 是否允许改变窗⼝⼤⼩,yes为允许;
//   location=no 是否显⽰地址栏,yes为允许;
//   status=no 是否显⽰状态栏内的信息(通常是⽂件已经打开),yes为允许;
window.close() //关闭当前的窗口 (关闭浏览器只能有一个页面)

改变位置的方法

//moveBy 一个是x轴的距离 y轴的距离
window.moveBy(100,100) //X+100 Y+100
//moveTo 一个x轴 一个y轴
window.moveTo(200,200) //X=200 Y=200

改变大小的方法

//改变对应的窗口大小
window.resizeBy(200,200) //width+200 height+200
//resizeTo 
window.resizeTo(200,200) //width=200 height=200

打印方法(打应当前的整个页面)

//print打印方法
window.print()

聚焦和失焦的方法

//focus 聚焦  blur 失去焦点
window.focus()
window.blur()

查找方法

//find查找 ctrl+f
window.find()

滚动栏位置改变

//滚动栏位置改变  初始位置 x:0,y:0
window.scrollBy(100,100) //原本的位置 x+100,y+100
window.scrollTo(500,500) //到达位置 x=500 y=500 //回到顶部
相关属性

innerHeight 和 innerWidth

parent

location对象 (*)

属性
console.log(location.hash) //哈希 #后面带的值 *
console.log(location.host) //主机 域名 ip地址+端口号
console.log(location.hostname) //主机名 ip地址 (127.0.0.1表示本机地址和localhost是一样的)
console.log(location.protocol) //协议 用于通信 (基于tcp/ip)http(明文传输) https(安全)(加密过)
console.log(location.port) //端口号  1--65525 (1-100的端口电脑占用了)http默认的端口80 https默认端口443
console.log(location.href) //链接的地址  也可以设置
console.log(location.search); //?后面带的值 一般是get请求传输数据的时候 *
console.log(location.origin); //跨域
console.log(location.pathname); //路径名 获取的除了协议和ip地址加端口号后面的东西
方法

assign 跳转页面

    location.assign('http://www.baidu.com')

replace 替换页面

location.replace('http://www.weibo.com')

reload 重新加载页面

location.reload()
//参数 boolean类型的值 true(从服务器加载 慢) false (从缓存中加载 快)

history对象 (*)

属性
length 历史页面个数
state 状态存储的对象
scrollRestoration 滚动栏恢复
方法

forwad 前进

function fn(){
    history.forward() //前进
}

back 后退

function fn1(){
    history.back() //后退
}

go 去任意的历史页面

function fn2(){
    history.go(-1) //去任意页面 0就是自己 小于0 后退 大于0前进
}

pushState

//spa 单页应用
function fn3(){
    //添加state的值 数据  ""  地址(会产生跨域问题)
    history.pushState('hello','','./index.html') //会改地址 但是不会刷新 推一个历史页面到历史区 state设置进去
}

replaceState

function fn4(){
    //替换state
    history.replaceState('world','','/location对象讲解.html') //会改地址 但是不会刷新 在历史区直接修改当前这个历史页面 state设置进去
}

screen 对象

属性
avaliHeight 可占用的最大高度
avaliWidth 可占用的最大宽度
avaliLeft 离屏幕左侧的距离
avaliTop 离屏幕上方的距离

navigator对象

属性
userAgent 用户浏览器设置信息

路由 (扩展)

对应的开发者来说 路由是一个很重要的东西。(前端路由)(后端路由)

后端路由

根据对应的接口地址来访问不同的功能 (后端路由 restful风格(接口的风格))

前端路由

根据不同的访问路径 (path)来渲染不同的内容(组件)

前端的路由主要分三种
1.页面路由 (跳转页面 刷新操作)
  • location.href

  • location.assign()

  • location.replace()

  • history.back()

  • history.forward()

  • 等这系列的操作都会导致页面进行跳转,重新加载页面(刷新)

2.hash路由 (使用hash来实现 后面必须要带上# 不会刷新页面)
  • 通过hash的改变来改变的对应的渲染内容 (事件监听 onhashchange)

    window.onhashchange = function(){
        console.log('hash值变了')
    }

     

    3.H5路由 (history里面state进行监听)(常用SPA (单页应用程序))
    • history.pushState() 加一个历史页面(地址变了 不会刷新)

    • history.replaceState() 替换历史页面 (地址变量 不会刷新)

    • 也是通过事件进行监听 (onpopstate)

      window.onpopstate = function(){
          console.log('路由改变了')
      }

      在对应的框架学习中 我们里面的路由的写法底层主要采用hash以及h5的方式(vue react)默认是路由模式为hash

      vue中路由有几种模式 (面试题)

      俩种模式(hash模式和history模式)

 

  总结:

主要认识:location history  的用法

路由的基本原理  h5 与 hash!!!(为将来写底层代码做铺垫)

 

有关day 8 Bom浏览器对象模型的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  3. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  4. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  5. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  6. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  7. ruby - 在 Ruby 中用键盘诅咒数组浏览 - 2

    我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作

  8. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  9. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  10. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

随机推荐