JavaScript学习DAY9

DAY9

一、浏览器的 onscroll 事件

这个 onscroll 事件是当浏览器的滚动条滚动的时候触发,或者鼠标滚轮滚动的时候出发

window.onscroll = function () {
  console.log('浏览器滚动了')
}
  • 注意:前提是页面的高度要超过浏览器的可视窗口才可以

scrollTop 获取滚动的距离

滚动距离
document  文档对象
获取的是页面向上滚动的距离
两种方式  
	document.body.scrollTop    没有<!DOCTYPE html>
	document.documentElement.scrollTop  有<!DOCTYPE html> 
//兼容写法 || 只有有一个条件成立直接使用即可

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

function getScrollTop(){
            if(document.body.scrollTop){
                return document.body.scrollTop
            }else{
                return document.documentElement.scrollTop
            }
        }
二、滑动导航栏
window.onscroll = function () {
            // 判断 当距离 > 多少的 时候 让导航栏 显示出来
            var top = document.body.scrollTop || document.documentElement.scrollTop
            if (top > 500) {
                nav.style.top = 0
            }else{
                nav.style.top = '-100px'
            }
        }
        btn.onclick = function () {
            // var top = document.body.scrollTop || document.documentElement.scrollTop
            // top = 0  // 直接给一个变量赋值 和页面滚动没有关系 我们要设置的不是变量 是页面卷曲出去的距离
            var timer = setInterval(function () {
                document.body.scrollTop ? document.body.scrollTop -= 10 : document.documentElement.scrollTop -= 10
                var top = document.body.scrollTop || document.documentElement.scrollTop
                if (top === 0) {
                    clearInterval(timer)   //清除定时器
                }
        }, 10)   //每10毫秒移动10像数
    }
三、浏览器不包含滚动条的宽和高
console.log(window.innerWidth)
console.log(document.documentElement.clientWidth)
console.log(window.innerHeight)
console.log(document.documentElement.clientHeight)
四、获取元素的尺寸

三大系列

1、client
1、clientWidth clientHeight  元素内容 + padding
        console.log(box.clientWidth)
        console.log(box.clientHeight)
2、clientLeft  clientTop  元素左边框 border-left和上边框border-top的宽度
        console.log(box.clientLeft)
        console.log(box.clientTop)
2、offset
3、offsetWidth offsetHeight  元素内容 + padding + border
        console.log(box.offsetWidth)
        console.log(box.offsetHeight)
4、offsetLeft  offsetTop
                 - 没有定位的时候 元素相对于页面左边和页面上边的距离   (margin)	
                 - 有定位的时候   元素相对于有定位的父元素左边和上边的距离
         console.log(box.offsetLeft)
         console.log(box.offsetTop)
3、page
五、BOM方法扩展

open() 在新窗口打开一个页面,参数1表示打开网站地址 参数2表示是否新窗口打开 参数3表示新窗口样式
close() 关闭当前页面

btn.onclick = function(){
            window.open('http://www.baidu.com','_blank', 'width=500, height=500')
        }

btn1.onclick = function(){
        window.close()
    }


onresize 窗口大小改变的时候触发
window.onresize = function(){
console.log(‘函数触发’)
}

六、DOM

​ BOM 浏览器对象模型
​ DOM 文档对象模型 就是提供了一系列方法让我去操作页面上的元素

​ DOM 里面有一个顶级对象 document
​ console.log(document)

			//循环执行  
             var s1 = '★☆★Javascript学习网★☆★'
             var s2 = '☆★☆Javasctipte学习网☆★☆'
			//定时器 
             // 开关变量
             var isOpen = true
             setInterval(function(){
                 if(isOpen){
                     document.title = s1
                     isOpen = false
                 }else{
                     document.title = s2
                     isOpen = true
                 }
             },1000)
七、获取页面元素
    <div calss="box" id="box"></div>
	1、通过 id 名字获取元素 
    	获取到的就是页面中的那个 id 为 box 的 div 标签
    	getElementById  
    	var box = document.getElementById("box")
    	console.log(box)    // <div></div>
    2、通过 class 类名获取元素
        getElementsByClassName  不能直接使用 class 因为 class 是一个关键字
        获取到的是一组元素,是一个长得和数组一样的数据结构,但是不是数组,是伪数组
        返回值是一个伪数组 有索引号,可以遍历但是不能直接使用数组的方法
        var box = document.getElementsByClassName('box')
  		console.log(box) // [<div></div>]
    	console.log(box[0]) // <div></div>
        var ul = document.getElementById('uu1')
        var reds = ul.getElementsByClassName("red")
        在整个文档里面去获取
        console.log(reds)
    3、通过 标签名获取元素  返回值是伪数组
        getElementsByTagName()
        var box = document.getElementsByTagName('div')
  		console.log(box) // [<div></div>]
    	console.log(box[0]) // <div></div>
    4、通过 css 选择器(任意的 css 选择器都可以)获取元素
        querySelector()  
	    queryselector系列   
                id选择器
                标签选择器
                类选择器
                ...
        只能获取满足条件的第一个元素
        var li  = document.querySelector('li:nth-child(odd)')  //odd是奇数行,even是偶数行
        console.log(li)
	    console.log(document.querySelector('div')) // 获取页面中的第一个 div 元素 
	    console.log(docuemnt.querySelector('.box')) // 获取页面中第一个有 box 类名的元素
        console.log(document.querySelector('#box')) // 获取页面中第一个 id 名为 box 的元素
	
    5、通过 css 选择器获取元素  (多个)
        querySelectorAll()  
	    获取所有满足条件的元素
        var lis = document.querySelectorAll('li')
        console.log(lis)
        console.log(document.querySelectorAll('div')) // 获取页面中的所有的 div 元素 
        console.log(docuemnt.querySelectorAll('.box')) // 获取页面中所有有 box 类名的元素  
    伪数组不能使用数组的方法
        通过 querySelectorAll() 获取的伪数组 能够使用数组的 forEach 方法
        lis.forEach(function(item) {
            console.log(item)
八、获取页面上的属性元素
	1、获取 html 
    document.documentElement
    console.log(document.documentElement)

    2、获取 body
    document.body
    console.log(document.body)

    3、获取的是 title 标签里面的内容
    document.title
    console.log(document.title)

    4、获取表单元素
    通过表单元素的 name 属性获取元素
    getElementsByName()
    console.log(document.getElementsByName('username'))
九、简单操作元素属性
// 通过标签名获取元素 || 通过 css 选择器获取元素
        var ul = document.getElementsByTagName('ul')[0]
        // console.log(ul)
        var li = ul.getElementsByTagName('li')[3]
        // console.log(li)
1、id

​ console.log(ul.id)
​ ul.id = ‘uu1’

2、className
  • 专门用来操作元素的类名的

    <body>
      <div class="box"></div>
      <script>
        var div = document.querySelector('div')
       	console.log(div.className) // box
      </script>
    </body>
    
  • 也可以设置元素的类名,不过是全覆盖式的操作

    <body>
      <div class="box"></div>
      <script>
        var div = document.querySelector('div')
       	div.className = 'test'
        console.log(div) // <div class="test"></div>
      </script>
    </body>
    
    • 在设置的时候,不管之前有没有类名,都会全部被设置的值覆盖

      系统自带的

      ​ 元素.classList.add(类名)

      ​ 元素.classList.remove(类名)

      <style>
               .f1{
                   background-color: brown;
                   width: 200px;
                   height: 200px;
               }
               .f2{
                   line-height: 200px;
                   text-align: center;
               }
      </style>
      <body>
      	<!-- className -->
          <button id="btn2">className类样式</button>
          <div id="box2" class="f1">元素二</div>
          
          <!-- classList -->
          <button id="btn3">className类样式</button>
          <div id="box3" class="f1">元素三</div>
          
      <script>
           	//1. 获取button按钮设置点击事件
              var btn3Ele = document.querySelector('#btn3')
              btn3Ele.onclick = function(){
                  // 2. 获取元素三
                  var box3Ele = document.querySelector('#box3')
                  // box3Ele.classList.add('f2')
                  box3Ele.classList.remove('f1')  
                  console.log(box3Ele)     //<div id="box3">元素三</div>
              }
      
              //1. 获取button按钮设置点击事件
              var btn2Ele = document.querySelector('#btn2')
              btn2Ele.onclick = function(){
                  // 2. 获取元素二
                  var box2Ele = document.querySelector('#box2')
                  box2Ele.className = 'f2'
                  console.log(box2Ele)      //<div id="box2" class="f2">元素二</div>
              }
      </scripts>
      </body>
      
3、style
  • 专门用来给元素添加 css 样式的

  • 添加的都是行内样式

元素.style.样式名 = 样式值
<body>
  <div></div>

  <script>
    var div = document.querySelector('div')
   	div.style.width = "100px"
    div.style.height = "100px"
    div.style.backgroundColor = "pink"
    console.log(div) 
    // <div style="width: 100px; height: 100px; background-color: pink;"></div>
  </script>
</body>
4、innerHTML

​ 获取: innerHTML 能获取到标签但是是字符串显示
​ 设置:都是全覆盖 直接把本身有的内容替换

  • 获取元素内部的 HTML 结构

    <body>
      <div>
        <p>
          <span>hello</span>
        </p>
      </div>
    
      <script>
        var div = document.querySelector('div')
        console.log(div.innerHTML)
    		/*
    			
          <p>
            <span>hello</span>
          </p>
    		
    		*/
      </script>
    </body>
    
  • 设置元素的内容

    <body>
      <div></div>
    
      <script>
        var div = document.querySelector('div')
       	div.innerHTML = '<p>hello</p>'
      </script>
    </body>
    
    • 设置完以后,页面中的 div 元素里面就会嵌套一个 p 元素
5、innertext

innerText 获取: innerText 只能获取元素里面的文本内容

  • 获取元素内部的文本(只能获取到文本内容,获取不到 html 标签)

    <body>
      <div>
        <p>
          <span>hello</span>
        </p>
      </div>
    
      <script>
        var div = document.querySelector('div')
        console.log(div.innerText) // hello
      </script>
    </body>
    
  • 可以设置元素内部的文本

    <body>
      <div></div>
      <script>
        var div = document.querySelector('div')
       	div.innerText = '<p>hello</p>'
      </script>
    </body>
    
    • 设置完毕以后,会把 <p>hello</p> 当作一个文本出现在 div 元素里面,而不会把 p 解析成标签
6、getAttribute

获取元素的自定义属性

<body>
  <div a="100" class="box"></div>

  <script>
    var div = document.querySelector('div')
   	console.log(div.getAttribute('a')) // 100
    console.log(div.getAttribute('class')) // box
  </script>
</body>
7、setAttribute

给元素设置一个属性(包括自定义属性)

<body>
  <div></div>
  <script>
    var div = document.querySelector('div')
   	div.setAttribute('a', 100)
    div.setAttribute('class', 'box')
    console.log(div) // <div a="100" class="box"></div>
  </script>
</body>
8、removeAttribute

直接移除元素的某个属性

<body>
  <div a="100" class="box"></div>
  <script>
    var div = document.querySelector('div')
   	div.removeAttribute('class')
    console.log(div) // <div a="100"></div>
  </script>
</body>
9、value
<body>
    用户名: <input type="text" id="username" value=""/>
	<script>// 表单内容获取 
		var inputEle = document.querySelector('#username')
        	inputEle.value = 'zhousir'
    	console.log(inputEle.value)  //zhousir
    </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值