BOM、location对象、history历史记录、scroll 浏览器滚动

一、location对象

location对象里的方法

1.location.reload
  • 作用:重新刷新加载页面,相当于按下了浏览器左上角的刷新按钮
  • 注意:页面刷新语句不要写在一打开页面就可以执行的地方,否则一进来就刷新会造成死循环,页面刷新多和按钮配合使用
2.location.assign(‘新的地址’)
  • 作用:重定向页面,和href一样,可以实现页面的跳转
3.location.replace(‘新的地址’)
  • 作用:替换当前的页面 因为不记录历史记录,所以不能回退

二、window对象

1.window.navigator对象
  • 作用: window.navigator对象就是用来记录浏览器的版本信息(常用属性)
2.window.navigator.userAgent
  • 作用:返回用户当前使用的浏览器版本及型号信息
3.window.navigator.appName
  • 返回值:Netscape 网景

【注意】所有的浏览器返回值都是统一的名字,向网景致敬(ie低版本除外)

4.window.navigator.platform
  • 作用:返回浏览器所在的操作信息

三、history历史记录

  • window下有一个history对象,里面包含了一些操作历史的记录属性和方法
  • 作用:可以操作浏览器的前进和后退
  • history包含用户的访问过的url
1.window.history.back()
  • 作用:回退到上一条历史记录,相当于点击浏览器左上角的后退按钮
  • 前提条件:要有上一条历史记录
2.window.history.forward()
  • 作用:前进到到下一条历史记录,相当于点击浏览器左上角的前进按钮
  • 前提条件:需要回退以后才能前进
3.window.history.go(参数)
  • 根据参数来判断是前进还是后退
  • 参数数为正值时是 前进
  • 参数数为负值时是 后退
  • 参数为0 刷新
例:
    <button id="back">back</button>
    <button id='forward'>forward</button>
    <button id='refresh'>刷新</button>
    <script>
        back.onclick = function () {
            //后退
            // window.history.back()
            window.history.go(-1)
        }

        forward.onclick = function () {
            //前进
            // window.history.forward()
            window.history.go(1)
        }

        refresh.onclick = function () {
            window.history.go(0)
        }

        console.log(window.history);

四、scroll 浏览器滚动

1.window.onscroll
  • 浏览器滚动事件,当页面发生滚动的时候触发,不论是上下滚动还是水平方向上的滚动
  • scroll系列可以动态的获取到元素的大小,滚动距离
  • 语法:元素.scrollTop
  • 返回元素被卷上去上侧的距离,返回值不带单位
  • 可读写的属性:写入的时候可以使页面瞬间滚动到指定的位置
2.document.documentElement.scrollTop
  • 使用时必须要有DOCTYPE,如果没有获得滚动高度一直是0
  • 作用:返回页面被卷上去的头部的距离
3.document.documentElement.scrollLeft
  • 使用时必须要有DOCTYPE,如果没有获得滚动宽度一直是0
  • 作用:返回页面被卷进去的左侧的距离
4.document.body.scrollTop
5.document.body.scrollLeft
  • 返回页面被卷进去的高度和宽度
  • 使用时必须没有DOCTYPE,如果有获得滚动宽度一直是0
6.window.pageYOffset 垂直方向
7.window.pageXOffset 水平方向

【注意】新增的 ie9以上版本才支持

【兼容写法】
  • 必须没有DOCTYPE
  • 使用短路来处理兼容性问题的一个前提条件就是不能报错
  • 使用逻辑运算符来处理兼容性问题,当前面的值为0 的时候,会执行后面的,前面的值不为0时,则直接使用前面的返回值
document.body.scrollTop||document.documentElement.scrollTop||window.pageYOffset
document.body.scrollLeft||document.documentElement.scrollLeft||window.pageXOffset
8.设置浏览器滚动到指定的位置
window.scrollTo(横向坐标,纵向坐标)
  • 注意:参数值不带单位,参数必须是两个参数,否则就会报错(瞬间定位)
window.scrollTo({top:0,left:0,behavior:“smooth”})
  • 如果参数是一个对象,对象里的属性写几个都可以
  • 特点:可以设置第三个配置项来决定页面滚动是瞬间定位还是平滑移动
  • behavior 翻译:行为
  • behavior:instant 立即
  • behavior:smooth

【注意】如果设置了平滑滚动,页面不轮滚动的距离是多少,所花费的时候基本上是一样,这样就说明了, 不同的滚动距离的滚动速度是不一样的。
              若果我们想要页面滚动距离大时花费时间久,距离小话费时间短,也就是说想要滚动的速度是一样的,就自己写方法实现了,原生的api达不到这样的效果。

案例:

<!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>
    #box{
      width: 100%;
      height: 5200px;
      background: cornflowerblue;
    }
    #btn{
      position: fixed;
      bottom: 30px;
      right: 30px;
    }
  </style>
</head>
<body>
  <div id="box">内容</div>
  <button id="btn">点击回到顶部</button>
  <script>
    var timer;
    btn.onclick = function(){
      // 设置定时器,每间隔一定时间就会改变滚动条的位置,来实现页面的滚动
      timer = setInterval(function(){
        // 每20ms就让页面卷去距离减少60
        document.documentElement.scrollTop -= 60;
        // 当被卷曲的高度小于等于0时,清除定时器
        if(document.documentElement.scrollTop <= 0){
          clearInterval(timer)
        }
        console.log(document.documentElement.scrollTop);
      },20)
    }

    // 中途停止滚动效果
    // 使用一个变量来记录页面滚动的距离
    var topNum = 0;
    // 给window绑定一个滚动事件
    window.onscroll = function(){
      if(document.documentElement.scrollTop > topNum){
        // 在给变量赋值前,先判断滚动的高度,如果变大则说明用户想反方向滚动
        // 清除定时器
        clearInterval(timer)
      }
      // 获取每一次触发浏览器滚动事件时,得到的滚动高度,赋值变量
      topNum = document.documentElement.scrollTop
    }
  </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值