JavaScript学习笔记二

news/2024/10/18 16:51:11/

数组拓展:

都不改变原数组

indexOf lastIndexOf forEach map filter reduce

伪数组没法用

indexOf:

从前往后寻找数值的下标,单个

/*indexOf(元素,start)作用:查找元素在数组中第一次出现时下标的位置,如果没有返回-1返回值:下标*/
var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
var res = arr.indexOf(2, 0)
console.log(res) //1

lastIndexOf:

从后往前寻找数值的下标,单个

/*lastIndexOf(元素,start)作用:查找元素在数组中最后一次出现时下标的位置,如果没有返回-1如果指定第二个参数 start,则在一个字符串中的指定位置从后向前搜索返回值:下标*/var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
var res = arr.lastIndexOf(2)   
var res = arr.lastIndexOf(2, 10)
console.log(res) //10

forEach:

遍历数组 得到数值,下标, 数组

/*forEach 遍历数组arr.forEach(function(value,index,array) {}); */
var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
arr.forEach(function (value, index, array) {// value  每一个数组元素// index  下标// array  数组console.log(value, index, array)
})

map:

遍历数组 全部进行数值计算得到结果

/*映射 返回一个新数组map(function(value,index,array){ return ...})*/var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
var newArr = arr.map(function (value, index, array) {// return的值是新数组的数组元素return value * 2
})
console.log(newArr)

filter:

遍历数组进行过滤,符合条件的取出来

/* filter(function(value,index,array){ return 过滤条件})*/var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
// 过滤数组中值大于4的数组元素  返回过滤后的数组
var newArr = arr.filter(function (value, index, array) {return value >= 4
})

reduce:

遍历数组 将数组内的数据全部加起来

/* reduce(function(累加器,当前值,索引,数组){return ...},累加器初始值)*/
var arr = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 2, 3, 4, 5]
// 求和
var sum = arr.reduce(function (s, value, index, array) {return s + value
}, 0)
console.log(sum) //51  数组中所有数组元素的和//  累乘
var arr = [1, 2, 3, 4];
arr = arr.reduce(function (up, down, index) { return up * down; });
alert(arr);

字符串String:

一、如何创建字符串

1:字面量的创建方式 var str = “123”; var s=‘123’

2:构造函数的方式 new String()

二、属性

length 字符串的长度

三、方法

(查,替,截,转)

查:

indexOf lastIndexOf 查下标

charAt 返回字符

charCodeAt 返回ascall码

// 查
var str = 'A我是中国人,a我爱我的祖国中国人'
// var oStr = new String('中国人民解放军')   //字符串对象
// console.log(typeof str, typeof oStr)console.log(str.length) //字符串的长度  12str.indexOf('字符串', start)
// 查找字符串在指定父串中第一次出现的下标位置,没有,返回-1
console.log(str.indexOf('中国人', 3)) //12str.lastIndexOf('字符串',start)
// 查找字符串在指定父串中最后一次出现的下标位置,没有,返回-1
console.log(str.lastIndexOf('中国人', 8)) //2// charAt(下标)  通过下标返回指定位置的字符
console.log(str.charAt(3)) //国for (var i = 0, len = str.length; i < len; i++) {console.log(str.charAt(i))
}// charCodeAt(下标)  通过下标返回指定位置字符的编码值(ascall码)
console.log(str.charCodeAt(0))
console.log(str.charCodeAt(7))String.fromCharCode(112)    // '0' 返回acsall码的字符

替:

replace 替换

// 替
replace(旧串, 新串) 替换字符串有指定的字符串,一次只能替换一个console.log(str.replace('中国', 'hello'))

截:

substring 从最小下标截取到大的下标位置,下标无法是负值

substr 截取指定长度的字符串

slice 下标可以是负值, 总是从左向右截取

// 截
//substring(start,end)  从最小下标截取到大的下标位置(包含小的下标,不包含大的下标)
// 下标不能是负值,会返回空的
console.log(str.substring(4, 9)) //国人,a我//substr(start,length) 截取指定长度的字符串
console.log(str.substr(4, 9)) //国人,a我爱我的祖//slice(start,end) 下标可以是负值, 总是从左向右截取,(包含开始 不包含结束)console.log(str.slice(4, 9)) //国人,a我
console.log(str.slice(-9, -4)) //我爱我的祖

转:

toUpperCase() 小写字母转大写字母

toLowerCase() 大写字母转小写字母

split(‘切割符’,长度) 字符串转数组

// 转
// toUpperCase()  小写字母转大写字母
// toLowerCase()  大写字母转小写字母
// split('切割符',长度) 字符串转数组var str1 = 'Good Good Study,Day Day Up'
console.log(str1.toUpperCase())
console.log(str1.toLowerCase())
console.log(str1.split(' '))

Math:

js提供的系统对象,数学

Math.PI   圆周率
Math.abs()  绝对值求近似数
Math.round() 四舍五入
注:  负数  >0.5 进一   <=0.5 舍去
console.log(Math.round(4.5)) //5
console.log(Math.round(4.4)) //4
console.log(Math.round(-4.5)) //-4
console.log(Math.round(-4.500001)) //-5
console.log(Math.round(-4.4)) //-4Math.ceil() 向上取整
// 向上取整
console.log(Math.ceil(4.5)) //5
console.log(Math.ceil(4.4)) //5
console.log(Math.ceil(-4.5)) //-4
console.log(Math.ceil(-4.500001)) //-4
console.log(Math.ceil(-4.4)) //-4Math.floor()  向下取整
console.log(Math.floor(4.5)) //4
console.log(Math.floor(4.4)) //4
console.log(Math.floor(-4.5)) //-5
console.log(Math.floor(-4.500001)) //-5
console.log(Math.floor(-4.4)) //-5求最值
Math.max()  求最大值
扩展 Math.max.apply(null,数组)Math.min() 求最小值
扩展 Math.min.apply(null,数组)求随机数
Math.random()  取到 >=0 && <1的数万能公式   Math.floor(Math.random()*(max-min+1)+min)

Date:

Date对象和Math对象不一样,Date是一个构造函数,使用时需要实例化后才能使用其中具体的方法和属性,Date实例是用来处理日期和时间的

获取当前时间:

var date = new Date()

获取指定时间和日期:

var date=new Date('2022/8/8')

date实例的方法:

getFullYear()   获取年份
getMonth()    获取月份
getDate()    获取日期
getDay()     获取星期
getHours()    获取小时
getMinutes()   获取分钟
getSeconds()   获取秒数

毫秒数:

var date = new Date()
console.log(date.valueOf()) //现在时间距离1970年1月1日的毫秒数console.log(date.getTime())// 简单的写法 --最常用
var date1 = +new Date() //
console.log(date1)// h5 新增的
console.log(Date.now())

对象:

自定义对象,内置对象,浏览器对象

浏览器对象BOM:

BOM —浏览器对象模型

BOM的顶级对象是window

BOM下的子对象有:document ,history,location ,navigatior screen

跳转页面:

window.location.href(网页)
window可以不写
location.href(网页)

刷新页面:

location.reload(true)

获取浏览器信息:

navigator.userAgent

window的方法:

alert()   弹出框
confirm()   确认框
prompt()   输出框
open()   打开新窗口
close()    退出当前窗口

计时器:

setInterval(表达式,毫秒值) 间隙性计时器
clearInterval() 清除计时器
setTimeout(表达式,毫秒值) 一次性计时器(定时器)
clearTimeout()清除计时器
btn.onclick = function () {// 开启定时器timer = setInterval(function () {console.log('hello')}, 1000)}oBtn1.onclick = function () {// console.log(timer)// 关闭定时器clearInterval(timer)}

DOM:

什么是DOM:

文档对象模型(document Object model),是w3c组织推荐的处理可扩展标记语言的标准编程接口

w3c定义了一些列的dom接口,通过这些dom接口可以改变网页的内容,结构 和样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYfJmyDV-1682995004279)(C:\Users\帅气的小刘\Desktop\demo\web\前端学习\image\dom树.png)]

  • 文档 一个页面就是一个文档,DOM中使用document表示
  • 节点:网页中的所有内容,在文档树中都是节点(标签,属性,文本,注释),使用node表示
  • 标签节点: 网页中所有标签,称为元素节点 使用element表示

DOM把以上这些内容都看作是对象

获取元素:

为什么要获取元素?

我们想要操作页面上的某部分(显示/隐藏,动画),需要先获取该部分对应的元素,再对其进行操作

根据ID获取:

document.getElementById(id)
参数:id值,区分大小写的字符串
返回值:  元素对象  或者null

根据标签名:

document.getElementsByTagName('标签名')  或者 element.getElementsByTagName('标签名')
参数:标签名
返回值:元素对象集合(伪数组,数组元素是元素对象)

注意:因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历

得到的元素对象是动态的

H5新增的获取元素方式:

document.getElementByClassName('类名')   根据类名返回元素对象集合document.querySelector('选择器')  根据指定选择器返回第一个元素对象document.querySelectorAll('选择器')  根据指定选择器返回所有元素对象集合

注意: 选择器要加符号 #box .nav

获取特殊元素(body,html):

document.body    返回body元素对象document.documentElement  返回html元素对象

操作元素:

javascript 的DOM操作可以改变网页内容,结构和样式,我们可以利用DOM操作元素来改变元素里面的内容,属性(这些操作都是通过元素对象的属性实现的)

改变元素内容(获取或设置):

element.innerText 从起始位置到终止位置的内容,去掉html标签,空格和换行也会去掉element.innerHTML 从起始位置到终止位置的全部内容,包括html标签,保留空格和换行(解析html标签)

代码:

<body><button>显示当前系统时间</button><div>某个时间</div><script>// 当我们点击了按钮,div里面的文字会发生改变// 1获取元素var btn = document.querySelector('button')var oDiv = document.querySelector('div')// 2 注册事件btn.onclick = function () {// oDiv.innerText = '2022-8-10'// oDiv.innerHTML = '2022-8-10'// oDiv.innerText = "<a href='#'>超链接</a>"oDiv.innerHTML = "<a href='#'>超链接</a>"/* 区别:innerText不识别html标签,去掉空格和换行innerHTML识别html标签,保留空格和换行*/}</script></body>

常用的元素属性操作:

src  href
id   alt   title

获取属性的值:

元素对象.属性名

设置属性的值:

元素对象.属性名=值

操作表单元素:

<body><button>按钮</button><input type="text" value="输入用户名" /><script>//  点击按钮,操作文本框的内容  控制禁用状态// 1 获取元素var oBtn = document.querySelector('button')var oInput = document.querySelector('input')// 2注册事件oBtn.onclick = function () {// oInput.innerText = '我被点击了'  普通盒子  div标签里的内容// 表单里面的值,文本内容是通过value来修改的var v = '我被点击了'oInput.value = v//input 的内容改变之后,我想要btn按钮禁用  不能再点击// oBtn.disabled = truethis.disabled = true// this指向的是事件函数的调用者 oBtn}</script></body>

操作元素之修改样式属性:

行内样式:

element.style.样式属性   (采用驼峰命名法)
div.style.backgroundColor

类样式:

element.className ="类名"element.className="类名1 类名2"

排他思想:

先排除其他人,然后才设置自己的样式,这种排除其他人的思想称为 排他思想

  • 给所有元素全部清除样式(干掉其他人)
  • 给当前元素设置样式(留下自己)
  • 顺序不能颠倒,先干掉其他人,再设置自己
//  1获取所有的按钮元素
var oBtns = document.querySelectorAll('button')
// oBtns得到的是伪数组,里面的每一个元素  oBtns[i]
for (var i = 0; i < oBtns.length; i++) {// 给每一个元素循环添加点击事件oBtns[i].onclick = function () {// alert(1)// 先把所有按钮的背景颜色去掉,干掉所有人for (var j = 0; j < oBtns.length; j++) {oBtns[j].style.backgroundColor = ''}// 给当前点击的元素this设置背景颜色为pink 留下自己this.style.backgroundColor = 'pink'}
}

换皮肤:

  • 给4个小图片利用循环注册点击事件
  • 当我们点击了这个图片,让页面背景改为当前图片
  • 把当前图片的src路径取过来,设置为body的背景
// 1 获取元素
var imgArr = document.querySelector('.box').querySelectorAll('img')
// console.log(imgArr)
// 2循环注册事件
for (var i = 0; i < imgArr.length; i++) {imgArr[i].onclick = function () {// this就是点击的当前图片  this.src 当前的图片的路径// this.src赋值给bodydocument.body.style.backgroundImage = 'url(' + this.src + ')'}
}

自定义属性操作:

获取属性值:

element.属性 只能获取内置属性,没法获取自定义属性

element.属性   获取属性值   获取内置属性值(元素本身自带的属性)
element.getAttribute("属性")   主要获取自定义的属性(标准) ,我们程序员自定义的属性

设置属性值:

element.属性=“值”  设置内置属性值
element.setAttribute("属性",值)  设置自定义的属性

移除属性:

element.removeAttribute("属性")

设置H5自定义属性:

自定义属性 data- 开头作为属性名并且赋值

兼容性获取 element.getAttribute(‘data-index’)

H5新增 element.dataset.index 或者 element.dataset[‘index’]

element.dataset方法获取的是一个集合。

节点:

节点概述:

网页中所有的内容都是节点(标签,属性,文本,注释),在Dom中,节点使用node来表示

HTML DOM树种的所有节点都可以通过js进行访问,所有的节点都可以被修改,也可以创建或者删除

节点拥有 nodeType(节点类型),nodeName(节点名称),nodeValue(节点值) 这三个基本属性

  • 元素节点 nodeType 值为1
  • 属性节点 nodeType 值为2
  • 文本节点 nodeType 值为3(文本节点包含文字,空格,换行等)

注意:实际开发中,节点操作主要操作的是元素节点

节点层级:

利用DOM树可以把节点划分为不同的层级关系,创建是父子兄层级关系

父级节点:

node.parentNode
//parentNode 属性可以返回某节点的父节点,是最近的一个父节点
//如果指定的节点没有父节点返回null

子节点:

所有子节点:
parentNode.childNodes (标准)   返回包含指定节点的子节点的集合,该集合为即时更新的集合注意:返回值里面包含思路所有的子节点,有元素节点,文本节点等
如果只想获取到里面的元素节点,需要专门处理
子元素节点:
parentNode.children (非标准)
parentNode.children是一个只读属性,返回所有的子元素节点,它只返回子元素节点,其余节点不返回虽然children 是一个非标准。得到了各个浏览器的支持
第1个子节点:
parentNode.firstChild 返回第一个子节点,找不到返回null,也是包含了所有的节点
最后1个子节点:
parentNode.lastChild返回最后一个子节点,找不到返回null,也是包含了所有的节点
第1个子元素节点:
parentNode.firstElementChild  返回第一个子元素节点,找不到返回null
最后1个子元素节点:
parentNode.lastElementChild返回最后一个子元素节点,找不到返回null

注意:firstElementChild 和lastElementChild 这两个方法有兼容性问题,IE9以上才支持

实际开发中firstChild和lastChild 包含其他节点,操作不方便,firstElementChild 和lastElementChild又有兼容性问题,如何操作呢

解决方案:

如果想要第一个子元素节点 可以使用  parentNode.children[0]
如果想要最后一个子元素节点  parentNode.children[parentNode.children.length-1]

兄弟节点:

下一个兄弟节点:
node.nextSibling  包含元素节点或者文本节点
上一个兄弟节点:
node.previousSibling包含元素节点或者文本节点
下一个兄弟元素节点:
node.nextElementSibling  只有元素节点
上一个兄弟元素节点:
node.previousElementSibling只有元素节点
兼容问题:
 function getNextElementSibling(element) {var el = elementwhile ((el = el.nextSibling)) {if (el.nodeType === 1) {return el}}return null}

创建节点:

document.createElement("tagName")
document.createElement方法创建由tagName指定的HTML元素,这些元素原先不存在
是根据我们的需求动态生成的,  称为动态创建元素节点

添加节点:

node.appendChild(child)node.appendChild 方法 将一个节点添加到指定父节点的子节点列表末尾,类似于css里面的after伪元素node.insertBefore()
node.insertBefore 将一个节点添加到父节点的指定子节点前面,类似于css里面的before伪元素

删除节点:

node.removeChild()  从node节点中删除一个子节点,返回删除的节点

复制节点:

node.cloneNode() 返回调用该方法的节点的一个副本,称为克隆节点

**注意:**node.cloneNode() 括号里是空或者false 浅拷贝 只复制标签不复制里面的内容

括号里为true 深拷贝 既赋值标签又复制里面的内容

创建元素的三种方式:

document.write() 直接将内容写入页面的内容流,但是文档流执行完毕,它会导致页面全部重绘

element.innerHTML是将内容写入某个dom节点,不会导致页面全部重绘

document.createElement() 创建多个元素效率会低,但是结构更清晰

注意:innerHTML效率要比createElement的高

Dom的总结:

文档对象模型(Document Object Model 简称Dom)是处理可扩展标记语言的标准编程接口W3C定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式.关于dom操作,主要针对的是元素的操作, 主要有创建,增,删,改,查,属性操作,事件操作创建1:document.write2:innerHTML3:createElement增加
1:appendChild
2:innerBefore
删
removeChild
改主要修改dom的元素属性,dom元素的内容,属性,表单的值修改元素的属性  src  href title修改普通元素内容  innerHTML  innerText修改表单元素   value  type  disabled修改元素样式    style  className
查 获取查询dom的元素1:getElementById  getElementsByTagName2:querySelector querySelectorAll3:parentNode  children  previousElementSibling   nextElementSibling
属性操作自定义属性setAttribute  设置dom的属性值getAttribute  获取dom的属性值removeAttribute  移除属性

事件高级操作:

注册事件:

给元素添加事件(注册事件/绑定事件)

注册事件有两种: 传统方式和监听注册方式

传统方式:

  • onclick 利用on开头的事件
  • <button onclick="alert(123)"></button>
  • btn.οnclick=function(){}
  • 同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数会覆盖前面注册的处理函数

监听注册方式:

eventTaget.addEventListener(type,事件处理程序[,useCapture])将指定的监听器注册到eventTaget(事件目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数type  事件类型 字符串  比如click ,mouseover 注意不要on
listener 事件处理程序 事件发生时,会调用该监听函数
useCapture  可选参数,是一个布尔值默认是false,  后面学习
事件监听:
eventTaget.addEventListener(type,事件处理程序[,useCapture])将指定的监听器注册到eventTaget(事件目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数ie9+以下  element.attachEvent(ontype, 事件处理程序)type  事件类型 字符串  比如click ,mouseover 注意不要on
listener 事件处理程序 事件发生时,会调用该监听函数
useCapture  可选参数,是一个布尔值默认是false,  后面学习
兼容性解决方案:
function addEventListenerFn(element, eventName, fn) {// 判断当前浏览器是否支持addEventListener方法if (element.addEventListener) {element.addEventListener(eventName, fn)} else if (element.attachEvent) {element.attachEvent('on' + eventName, fn)} else {// 相当于element.onclick = fnelement['on' + eventName] = fn}
}

删除事件:

传统方式:

eventTarget.onclick = null

监听注册方式:

eventTarget.removeEventListener(type,listener[,useCapture])
eventTarget.datachEvent(eventNameWithOn,callback)   // 低版本
兼容处理:
function removeEventListenerFn(element, eventName, fn) {// 判断当前浏览器是否支持if (element.removeEventListener) {element.removeEventListener(eventName, fn)} else if ((element, detachEvent)) {element.detachEvent('on' + eventName, fn)} else {element['on' + eventName] = null}
}

DOM事件流:

html中的标签都是相互嵌套的,我们可以想象成一个盒子装一个盒子,document是最外面的大盒子,当你点击一个div时,你也点击了div的父元素,甚至整个页面

事件流就是描述从页面中接收事件的顺序

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程就是DOM事件流

事件冒泡:IE最早提出,事件开始由具体的元素接收,然后逐级向上传播到DOM最顶级节点的过程

事件捕获:网景最早提出,由DOM最顶级节点开始,然后逐级向下传播到具体的元素接收的过程

w3c采用折中的方式,制定了统一的标准, ----先捕获再冒泡

事件流会经历3个阶段:

  • 捕获阶段
  • 当前目标阶段
  • 冒泡阶段

注意:

js代码中只能执行捕获或者冒泡的其中 一个阶段

onclick和attachEvent只能得到冒泡阶段

addEventListener(type,listener[,useCapture])第三个参数如果是true表示再事件捕获阶段调用事件处理函数,如果是false(默认是false)表示再事件冒泡阶段调用事件处理函数,

实际开发中,很少使用事件捕获,更关注事件冒泡

有些事件是没有冒泡的,onblur. onfocus,onmouseenter,onmouseleave

事件对象:

事件对象:事件发生后,跟事件相关的一些列信息数据的集合都被放到这个对象里面,这个对象就是事件对象

使用:

件触发发生就会产生事件对象,并且系统会以形参的形式传递给事件处理函数

事件处理函数中声明一个形参来接收事件对象

兼容处理:

window.event 获取实践对象 对于低版本

e.srcElement 返回触发事件的对象 非标准 ie6~8

// 获取对象返回触发事件的对象
div.onclick = function (e) {e = e || window.eventvar target = e.target || e.srcElementconsole.log(target)
}//  阻止事件冒泡
if (e && e.stopPropagation) {e.stopPropagation()
} else {window.event.cancelBubble = true
}

事件对象的属性和方法:

e.target       返回触发事件的对象  标准
e.srcElement   返回触发事件的对象   非标准 ie6~8e.type         返回事件的类型  比如 click mouseover  不带one.preventDefault()  阻止默认行为,不让链接跳转
e.returnValue = false   阻止默认行为,不让链接跳转
return false   都可以e.stopPropagation()  阻止事件冒泡
e.cancelBubble = true //非标准  取消冒泡  

事件委托:

事件委托: 把事情委托给别人,代为处理

事件委托也称为事件代理,在jQuery里面称为事件委派

不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行

原理:

给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素

作用:

1:只操作了一次dom,提高了程序的性能
2:动态新创建的子元素,也拥有事件

鼠标事件对象:

event 事件对象是事件相关的一系列信息的集合

鼠标事件对象:

e.clientX   返回鼠标相对于浏览器窗口可视区域的X坐标
e.clientY   返回鼠标相对于浏览器窗口可视区域的Y坐标
e.pageX     返回鼠标相对于文档页面的X坐标  ie9+支持
e.pageY    返回鼠标相对于文档页面的Y坐标  ie9+支持
e.screenX   返回鼠标相对于电脑屏幕的X坐标
e.screenY   返回鼠标相对于电脑屏幕的Y坐标

其他:

contextmenu 我们可以禁用右键菜单

selectstart 禁止选中文字

// contextmenu  我们可以禁用右键菜单
document.addEventListener('contextmenu', function (e) {e.preventDefault()
})
// selectstart 禁止选中文字
document.addEventListener('selectstart', function (e) {e.preventDefault()
})

键盘事件:

onkeyup   键盘按键松开时触发
onkeydown  键盘按键按下时触发
onkeypress  键盘按键按下时触发  但是它不识别功能键  比如 ctrl shift 箭头等

键盘事件对象:

keyCode  返回该键的ASCII值
注意:
  • onkeydown 和onkeyup不区分字母大小写,onkeypress区分字母大小写
  • 实际开发中,更多的使用keydown和keyup能识别所有的键
  • keypress不识别功能键,但是keyCode属性能区分大小写,返回不同的ASCII值

元素偏移量offset:

offset就是偏移量,使用offset的相关属性可以动态的得到该元素的位置(偏移),大小等.

element.offsetTop  返回元素相对带有定位父元素上方的偏移
element.offsetLeft  返回元素相对带有定位父元素左边的偏移包含padding +border+width
element.offsetWidth   返回自身包括padding 边框  内容区的宽度,返回的值不带单位
element.offsetHeight   返回自身包括padding 边框  内容区的高度,返回的值不带单位

offset和style的区别:

offset是只读的,不能赋值

style可以进行赋值,并且只能是行内样式 width设置的多少,style.width就是多少

console.log(element.style.width)// element.offsetWidth = 400
element.style.width = '400px'

client系列:

element.clientTop
element.clientLeft包括padding + 内容区的宽度、高度  返回的值不带单位
element.clientWidth   
element.clientHeight

scroll系列:

element.scrollWidth   内容占的宽度  内容少的时候是width+padding  返回的值不带单位
element.scrollHeight    内容占的高度  内容少的时候是height+padding   返回的值不带单位element.scrollTop     滚动上侧卷过的距离
element.scrollLeft    滚动左侧卷过的距离
页面滚动的距离 window.pageYOffset


http://www.ppmy.cn/news/58053.html

相关文章

VBA替换中文文献引用出现的et al.和and

问题描述&#xff1a;Endnote是常用的文献管理工具&#xff0c;并提供国标模板Chinese Std GBT7714 (numeric).ens&#xff0c;但Endnote在中英文混排上略欠考虑。Chinese Std GBT7714使用序号的形式&#xff08;******1&#xff09;对文献进行引用&#xff0c;但有时我们需要以…

【Mysql】基础篇:DML(data manipulation language)语句:增、删、改数据库数据总结

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Mysql从入门到精通近期目标&#xff1a;写好专栏的每一篇文章 目录 一、…

爬取景区源码

import requests import json import csvpostUrl "https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList"# 将景点poiId和名称添加到此处 urls [["75487323","凤凰雾涧江景民宿"],["11052220","古童临江客栈&q…

【容器化应用程序设计和开发】2.2 容器编排和Kubernetes调度

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;2.1 容器化基础知识和Docker容器 第二章&#xff1a;2.2 Dockerfile 的编写和最佳实践 容器化应用程序设计和开发 2.3 容器编排和Kubernetes调度 2.3 容器编排和Kubernetes调度 容器编排是…

超全!超详细!2023大 厂 前端面试题手册

HTML、CSS、浏览器 相关 ................................................................... 1 1.网络中使用最多的图片格式有哪些 ............................................................................................. 1 2. 请简述 css 盒子模型 ........…

laravel-admin安装wang-Editor3之坑

先说坑&#xff0c;一开始不知道哪个步骤配置问题&#xff0c;在富文本中上传图片可以正常传到服务器&#xff0c;但是前端无法回显&#xff0c;一直提示图片上传失败&#xff0c;在admin.php的wang-editor配置项中开启debug后&#xff0c;在浏览器console中也只是显示什么unde…

k8s之审计日志

一、为什么要有审计 Kube-Apiserver 的负载突然变高&#xff0c;大量访问失败&#xff0c;集群中到底发生了什么&#xff1f; 当集群发生问题时&#xff0c;这是Metric一般会失效&#xff0c;为了排查以上问题&#xff0c;k8s 提供了两种原生的日志形式——审计&#xff08;A…

关于C#中委托的思考与实例

委托的定义&#xff1a;委托是持有一个或多个方法的对象。 delegate void MyDel(int value);//声明委托类型 MyDel del;//声明委托变量委托的实质&#xff1a;委托的实质其实也是类&#xff0c;同样继承System.Object&#xff0c;这也是委托无论在类内还是类外都能被定义的原因…