学习前端第四十三天(样式和类、元素大小和滚动、Window大小和滚动、坐标)

news2025/2/21 23:56:31

一、样式和类

1、className,classList

elem.className 对应于 "class" 特性

    <div id="box" class="a b" style="height: 20px;">
        box
    </div>
    <script>
        const box = document.getElementById("box");
        // className就是元素节点的class
        console.log(box.className);  // a b
    </script>

classList用来对类名进行各种处理


    <div id="box" class="a b" style="color:red ; height: 20px;">
        box
    </div>
    <script>
        const box = document.getElementById("box");
        // .classList 是一个特殊的对象,它具有 add/remove/contains/toggle 单个类的方法。
        box.classList.add("c", "d", "e");   // 增加类名
        box.classList.add("xx");
        console.log(box.className);         //  a b c d e

        box.classList.remove("d", "e");     // 移除类名
        box.classList.remove("xx")
        console.log(box.className);         //  a b c

        box.classList.contains("d e");      // 是否存在类名
        console.log(box.classList.contains("d", "e"));    // false
        console.log(box.classList.contains("a"));    // true
        console.log(box.classList.contains("b"));

        box.classList.toggle("xc");      // 如果类不存在就添加类
        console.log(box.className);      // a b c xc
        box.classList.toggle("a");       // 存在就移除它
        console.log(box.className);      // b c xc

        // classList 是可迭代的
        for (let name of box.classList) {
            console.log((name));    // b,然后是 c,然后是xc
        }
    </script>

2、元素样式

 elem.style 属性是一个对象

    <div id="box" class="a b" style="color:red ; height: 20px;">
        box
    </div>
    <script>
        // style
        const box = document.getElementById("box");
        console.log(box.style);  // 一个对象
        console.log(box.style.color);  // red 
        console.log(box.style.height); // 20px

        box.style.backgroundColor = "yellow";  // 设置背景色为黄色
        box.style.color = "";       // 设置字体颜色为无
    </script>

 3、计算样式:getComputedStyle

 getComputedStyle,用来读取样式

 style属性仅对“style”特性值起作用,而没有任何CSS级联。

因此,无法使用element.style读取来自CSS的任何内容

所以,可以使用getComputedStyle获得元素样式最终计算结果,

getComputedStyle(element, [pseudo]).?? pseudo可以选择填写伪元素

    <div id="box" class="a b" style="color:red ; height: 20px;">
        box
    </div>
    <script>
        const box = document.getElementById("box");
        console.log(getComputedStyle(box).fontSize);    // 16px
        console.log(getComputedStyle(box).fontWeight);  // 400
        // 获得伪元素样式
        console.log(getComputedStyle(box, "before").fontSize);    // 80px
        console.log(getComputedStyle(box, "before").fontWeight);  // 400
        console.log(getComputedStyle(box, "before").color);       // rgb(255, 0, 0)''
    </script>

二、元素大小和滚动

 

1、offsetWidth / offsetHeight

提供了元素的“外部” width/height,它的完整大小(包括边框)。

2、clientWidth / clientHeight

元素边框内区域的大小。包括“content width”和“padding”,不包括滚动条

3、clientLeft /  clientTop

左边框宽度和上边框宽度

4、scrollHeight / scrollWidth

就像 clientWidth/clientHeight,但它们还包括滚动出(隐藏)的部分:

scrollHeight :内容区域的完整内部高度,包括滚动出的部分

scrollWidth :内容区域的完整内部宽度,包括滚动出的部分

当横向或竖向没有滚动时,scrollHeight / scrollWidth和clientHeight / clientWidth相等

5、scrollLeft / scrollTop

元素的隐藏、滚动部分的 width/height,也就是已经滚动了多少

三、Window大小和滚动

1、窗口的 width / height

获取窗口的宽高

window.innerWidth/innerHeight

        // 优先使用这个

        console.log(window.innerWidth); // 整个窗口的宽度

        console.log(window.innerHeight); // 整个窗口的高度

document.documentElement.clientWidth / clientHeight

        console.log(document.documentElement.clientWidth);  // 减去滚动条宽度后的窗口宽度

        console.log(document.documentElement.clientHeight);  // 减去滚动条宽度后的窗口高度

2、文档的 width / height

        // 为了可靠地获得完整的文档宽度/高度,我们应该采用以下这些属性的最大值:
        let scrollHeight = Math.max(
            document.body.scrollHeight, document.documentElement.scrollHeight,
            document.body.offsetHeight, document.documentElement.offsetHeight,
            document.body.clientHeight, document.documentElement.clientHeight
        );
        let scrollWidth = Math.max(
            document.body.scrollWidth, document.documentElement.scrollWidth,
            document.body.offsetWidth, document.documentElement.offsetWidth,
            document.body.clientWidth, document.documentElement.clientWidth
        );

3、获得当前滚动

window.pageXoffset / pageYoffset

        // 获得当前滚动

        setTimeout(() => {
            console.log('当前已从顶部滚动:' + window.pageYOffset);
            console.log('当前已从左侧滚动:' + window.pageXOffset);
        }, 5000);

4、滚动:scrollBy,scrollTo,scrollIntoView

scrollBy(x,y),滚动到相对于当前位置的(x,y)

scrollTo(x,y),使选中元素的左上角滚动到绝对位置(文档左上角)的(x,y)

以上两个方法后面的(x,y)可以改写为

{

left:?

top:?

behavior:“smooth”

},behavior:“smooth”可以使滚动更加丝滑

scrollIntoView:

对 elem.scrollIntoView(top) 的调用将滚动页面以使 elem 可见。它有一个参数:

  • 如果 top=true(默认值),页面滚动,使 elem 出现在窗口顶部。元素的上边缘将与窗口顶部对齐。
  • 如果 top=false,页面滚动,使 elem 出现在窗口底部。元素的底部边缘将与窗口底部对齐。
const pp = document.getElementById("pp")
setInterval(() => {
pp.scrollIntoView();   // 页面滚动,使 elem 出现在窗口顶部。元素的上边缘将与窗口顶部对齐。
pp.scrollIntoView(false); // 页面滚动,使 elem 出现在窗口底部。元素的底部边缘将与窗口底部对齐。
        }, 3000);

 

 5、禁止滚动

document.body.style.overflow = "hidden"。

四、坐标

1、元素坐标:getBoundingClientRect()

           主要的属性:

           x/y —— 矩形原点相对于窗口的 X/Y 坐标,

           width/height —— 矩形的 width/height(可以为负)。

           此外,还有派生(derived)属性:

           top/bottom —— 顶部/底部矩形边缘的 Y 坐标,

           left/right —— 左/右矩形边缘的 X 坐标。

2、elementFromPoint(x, y) 

使用document.elementFromPoint(x,y)会返回在窗口坐标(x,y)处的元素

console.log(document.elementFromPoint(100, 100));  // html,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1689967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp gaid-item组件增加角标的方法以及最新版本已删除角标参数的注意事项

在uniapp项目的开发中&#xff0c;列表组件gaid-item大家应该都是经常用的&#xff0c;其实组件上的角标用法也是很方便的&#xff0c;但是不熟悉的新手朋友&#xff0c;特别是用最新版的朋友可能都找不到角标方法的使用地方&#xff1a; 1.首先官方说明&#xff0c;在最新版本…

【Unity】免费的高亮插件——QuickOutline

除了常见的HighLightSystem来实现的高亮功能&#xff0c;其实还有很多的方法实现物体的高亮。 在 Unity资源商店 搜索OutLine&#xff0c;就会有很多免费好用的高亮插件。 下面介绍一下 QuickOutline这个插件&#xff0c;在 Unity资源商店 搜索到后&#xff0c;点击进去就可以…

【QGIS入门实战精品教程】13.1:导入带地理标签的航测照片

文章目录 一、数据准备二、导入带地理标签的航测照片三、导出点位shp四、生成航线一、数据准备 本实验数据位于13.1:导入带地理标签的航测照片.rar中,如下: 查看照片及相机参数信息,航测照片都带有相机参数、部分POS及地理坐标信息,如下所示: 二、导入带地理标签的航测照…

Java - AbstractQueuedSynchronizer

AQS简介 AQS全称AbstractQueuedSynchronizer&#xff0c;抽象队列同步器&#xff0c;是一个实现同步组件的基础框架。AQS使用一个int类型的成员变量state维护同步状态&#xff0c;通过内置的同步队列&#xff08;CLH锁、FIFO&#xff09;完成线程的排队工作&#xff0c;底层主…

AI大模型如何赋能智能座舱

AI 大模型如何赋能智能座舱 从上海车展上&#xff0c;我们看到由于智能座舱配置性价比较高&#xff0c;已经成为车企的核心竞争点之一&#xff0c;随着座舱硬件规模化装车&#xff0c;蔚小理、岚图、极狐等新势力开始注重座舱多模态交互&#xff0c;通过集成语音/手势/触控打造…

Vue速成学习笔记

这两天速成了一下Vue&#xff0c;在这里记录一下相关的笔记&#xff0c;之后有时间详细学Vue的时候再来回顾一下&#xff01; 一、Vue理解 1、Vue的核心特征&#xff1a;双向绑定。 在网页中&#xff0c;存在视图和数据。在Vue之前&#xff0c;需要使用JavaScript编写复杂的逻…

电脑同时配置两个版本mysql数据库常见问题

1.配置时&#xff0c;要把bin中的mysql.exe和mysqld.exe 改个名字&#xff0c;不然两个版本会重复&#xff0c;当然&#xff0c;在初始化数据库的时候&#xff0c;如果时57版本的&#xff0c;就用mysql57(已经改名的)和mysqld57 代替 mysql 和 mysqld 例如 mysql -u root -p …

Redis(十二) 持久化

文章目录 前言Redis实现数据的持久化Redis实现持久化的策略RDB手动触发RDB持久化操作自动触发RDB持久化操作 AOFAOF重写机制 前言 众所周知&#xff0c;Redis 操作数据都是在内存上操作的&#xff0c;而我们都知道内存是易失的&#xff0c;服务器重启或者主机掉电都会导致内存…

面试八股之MySQL篇4——事务篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

生命线上的高效传递:了解下医院内、外网文件交互方式的革新之路

在医院的日常运营中&#xff0c;普遍采用内外网隔离的建设方式。内网集信息管理、通讯协作、资源共享、业务流程管理于一身&#xff0c;承载了医院的医疗核心业务&#xff0c;如HIS&#xff08;医院信息系统&#xff09;、LIS&#xff08;实验室信息系统&#xff09;、EMR&…

如何灵活运用keil工具进行问题分析(1)— 解决日常程序卡死问题

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

山脉数组的峰顶索引 ---- 二分查找

题目链接 题目: 分析: 我们很明显, 可以从峰值位置将数组分成两段, 具有"二段性", 所以可以用二分查找因为arr是山峰数组, 不存在相等的情况如果arr[mid] > arr[mid 1], 说明mid的位置可能是峰值, 移动right mid如果arr[mid] < arr[mid 1], 说明mid的位置…

Java基础之异常(简单易懂)

异常 1.JAVA异常体系 &#xff08;1&#xff09;Throwable类(表示可抛)是所有异常和错误的超类&#xff0c;两个直接子类为Error和Exception,分别表示错误和异常;其中异常类Exception又分为运行时异常和非运行时异常&#xff0c;这两个异常有很大区别&#xff0c;运行时异常也…

【分享笔记】符尧:预训练、指令微调、对齐、专业化——论大语言模型能力的来源

分享时间&#xff1a;2023.2 目录 模型家族scaling law和涌现能力模型不同阶段pretrainingintruction tuningalignment upper bound和lower bound 模型家族 看模型要从演化家族来看&#xff0c;而不能单独看&#xff0c;很多人认为一些能力并不是RLHF激发出来的&#xff0c;而…

【区块链】智能合约漏洞测试

打开Ganache vscode打开智能合约漏洞工程 合约内容 pragma solidity >0.8.3;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;emit Balance(balances[msg.sender]);}function with…

前端工程化07-常见的包管理工具npm、yarn、cnpm、npx、pnpm

8、包管理工具 8.1、包管理工具概述 npm包管理工具、在安装node的时候这个东西就已经安装过了&#xff0c;通过npm去管理包的时候这个时候回有一个配置文件叫做package.json,他是以json的方式来书写对应的一个配置文件&#xff0c;这个配置文件是可以添加特别多的一些字段的&…

d3dx9_41.dll是个什么东西?d3dx9_41.dll文件丢失的解决方法

随着软件技术的不断发展&#xff0c;电脑用户可能会遇到各种系统错误和问题&#xff0c;其中之一就是动态链接库&#xff08;DLL&#xff09;文件的丢失。d3dx9_41.dll文件丢失是一个常见的问题&#xff0c;它通常会在运行依赖于DirectX图形技术的游戏或应用程序时被报告。这个…

MySQL中如何知道数据库表中所有表的字段的排序规则是什么?

查看所有表的字段及其排序规则&#xff1a; 你可以查询 information_schema 数据库中的 COLUMNS 表&#xff0c;来获取所有表的字段及其排序规则。以下是一个示例查询&#xff1a; SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME FROM information_schema.COL…

影视解说5.0版零基础视频课程

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

Windows11的这个地方暴露着你的隐私,把它关掉避免尴尬

前言 现在的电脑真的是越来越智能化&#xff01;现在有很多小伙伴都是用着Windows11的吧&#xff01;用习惯了Windows11之后&#xff0c;突然发现它还是挺顺手的。 但不知道你有没有发现&#xff0c;Windows11上面有个地方暴露着你的隐私。这个隐私可能是某个小姐姐的图片&am…