前端基本功:JS(八):offset家族

前端基本功:JS(八):offset家族,第1张

offset 自己的

目的: js中有一套方便的获取元素尺寸的办法就是offset家族;

div { width:220px; border-left:2px solid red; padding:10px;}

divoffsetWidth = 220 + 2 + 20

为什么不用 divstylewidth 因为东西 只能得到行内的数值

如果 父级 都没有定位则以body 为准

这里的父级指的是所上一级 不仅仅指的是 父亲 还可以是 爷爷 曾爷爷 曾曾爷爷。。。。

offsetParent返回该对象的父级 (带有定位) 不一定是亲的爸爸

前面学过一个返回父亲(亲的) parentNode 有所区别

如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。

如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

1.最大区别在于 offsetLeft 可以返回没有定位盒子的距离左侧的位置。 而 styletop 不可以 只有定位的盒子 才有 left top right

2.offsetTop 返回的是数字,而 styletop 返回的是字符串,除了数字外还带有单位:px。

3.offsetTop 只读,而 styletop 可读写。

4.如果没有给 HTML 元素指定过 top 样式,则 styletop 返回的是空字符串。

5.最重要的区别 styleleft 只能得到 行内样式 offsetLeft 随便

我们学过一些事件 : onmouseover onmouseout onclick

event 单词翻译过来 事件 的意思

event 就是事件的对象 指向的是 事件 是 onclick

在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持的方式不同。

比如鼠标 *** 作时候,会添加鼠标位置的相关信息到事件对象中。

普通浏览器支持 event

ie 678 支持 windowevent

是以我们的 电脑屏幕 为基准点 测量

以我们的 文档 (绝对定位) 的基准点 对齐

ie678 不认识

可视区域 为基准点 类似于 固定定位

onmouseover onmouseout onclick

onmousemove 当鼠标移动的时候 就是说,鼠标移动一像素就会执行的事件

divonmousemove = function() { 语句 }

当鼠标再div 身上移动的时候,就会执行。

他们相同点 都是 经过 div 才会触发

divonmouseover 只触发一次

divonmousemove 每移动一像素,就会触发一次

onmouseup 当鼠标d起

onmousedown 当鼠标按下的时候

1拖动 原理 == 鼠标按下 接着 移动鼠标 。

baronmousedown = function(){

documentonmousemove = function(){

}

}

2当我们按下鼠标的时候,就要记录当前 鼠标 的位置 - 大盒子的位置

算出 bar 当前 在 大盒子内的距离 。

我们知道 按下鼠标然后拖拽可以选择文字 的。

清除选中的内容

offset 自己的 偏移

offsetWidth 得到自己的宽度

offsetHeight

构成 : width + padding + border

div width 200 border 3px padding-right: 15px

div offsetWidth = 200 + 6 + 15 = 221

◆ offsetLeft 和 offsetTop

divoffsetLeft

得到距离 这个 div 最近的 带有定位的 父 盒子 左边距离

◆ offsetParent 返回自己的父亲元素 (带有定位的)

parentNode 这个返回亲父亲 不管父亲是否带有定位

◆ styletop 和 offsetTop

offsetTop 只读 只可以得到结果 但是不能赋值

styletop 能得到 (行内式 ) 但是可以给值

styletop 得到的是 25px

offsetTop 得到的是 25

◆ 事件对象 event

divonclick = function(event) { } event 是点击的事件对象

event 集合点击事件的相关信息

pageX 文档的 参考点

clientX 可视区域

ScreenX 屏幕

◆ 常用事件

onmouseover 经过

onmouseout 离开

onmousemove 鼠标移动

var num = 0;

divonmouseover = function() { num++; consolelog(num))} 1

divonmousemove = function() { num++; consolelog(num))}

onmousedown 按下鼠标

onmouseup d起鼠标

拖拽: 先按下鼠标 然后 移动鼠标

baronmousedown = funtion() {

documentonmousemove = function() {}

}

最大 window 对象 document对象

今日案例:筋斗云、点击跟随鼠标、放大镜案例素材获取

链接: > 密码:homu

代码大致如下供参考:

var image=new Image();

imagesrc=//你的背景的src;

var divelement = documentgetElementById(你的div的id);

divelementstyleheight=(imageheightdivelementoffsetWidth)/imagewidth + "px";

几个需要注意的地方是imagesrc=xxx后需要等待直到下载完成。但是如果这个脚本是在你的div已经初始化好之后调用的话,那么已经被下载过了,所以直接进行后面的就好。另外以styleheight来设置高度的话后面需要加单位,比如px

<html>

<head>

<title>js 获取div所填充内容的实际高度 </title>

</head>

<body>

<div id="div1">

百度知道是一个基于搜索的互动式知识问答分享平台,于2005年6月21日发布,并于2005年11月8日转为正式版。百度知道一直探索国际化发展,于2012年3月31日发布百度知道台湾版。

</div>

<button type="submit" onclick="test()">点击获取</button>

<script type="text/javascript">

function test() {  

        var oDiv = documentgetElementById('div1');  

        alert(oDivoffsetHeight);  

    }  

</script>

</body>

</html>

下面结合各上图介绍一下各个属性的作用:

一offsetTop属性:

此属性可以获取元素的上外缘距离最近采用定位父元素内壁的距离,如果父元素中没有采用定位的,则是获取上外边缘距离文档内壁的距离。所谓的定位就是position属性值为relative、absolute或者fixed。

返回值是一个整数,单位是像素。

此属性是只读的。

二offsetLeft属性:

此属性和offsetTop的原理是一样的,只不过方位不同,这里就不多介绍了。

三offsetWidth属性:

此属性可以获取元素的宽度,宽度值包括:元素内容+内边距+边框。不包括外边距和滚动条部分。

返回值是一个整数,单位是像素。

此属性是只读的。

四offsetHeight属性:

此属性可以获取元素的高度,宽度值包括:元素内容+内边距+边框。不包括外边距和滚动条部分。

返回值是一个整数,单位是像素。

此属性是只读的。

五clientWidth属性:

此属性可以返回一个元素的宽度值,值是:元素的内容+内边距。不包括边框、外边距和滚动条部分。

返回值是一个整数,单位是像素。

此属性是只读的。

六clientHeight属性:

此属性可以返回一个元素的高度值,值是:元素的内容+内边距。不包括边框、外边距和滚动条部分。

返回值是一个整数,单位是像素。

此属性是只读的。

七scrollLeft属性:

此属性可以获取或者设置对象的最左边到对象在当前窗口显示的范围内的左边的距离,也就是元素被滚动条向左拉动的距离。

返回值是一个整数,单位是像素。

此属性是可读写的。

八scrollTop属性: 

此属性可以获取或者设置对象的最顶部到对象在当前窗口显示的范围内的顶边的距离,也就是元素滚动条被向下拉动的距离。

返回值是一个整数,单位是像素。

IE8 background 即时你写了颜色他也是undefined

background-color 颜色值 transparent

火狐 background 即时你写了颜色他也无法获取

background-color rgb格式 transparent

谷歌 background rgba(255, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box

background-color rgb格式 rgba(0, 0, 0, 0)

还有background 不光可以写颜色,还可以写加颜色等,如果你只是按他们的默认值来判读是否有颜色的话,我感觉行不通,如果background :后面跟的是,jqury能获得值不是默认值,那你怎么判读他是否有背景色

不过也不是行不通的还有一个办法就是写一个方法把所有的颜色都转化为16进制

这个方法要具备这些功能

1、他能认识颜色值是英文名还是rgb格式的

2、把不是颜色多余的部分去掉 如"rgba(0, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box“要截取成rgba(0, 0, 0, 0)

这个方法只能用在background-color上

因为IE、火狐取不到background-color的颜色值,即时你设置了

以上就是关于前端基本功:JS(八):offset家族全部的内容,包括:前端基本功:JS(八):offset家族、js获取背景图片宽高比后根据浏览器宽度动态赋值div.style.height、js 获取div所填充内容的实际高度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9648007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存