前端面试题每日一学_6

今日一题:

下面的CSS代码中,定义了一个帧动画,请问该帧动画能否正常流畅的执行?
@keyframes move {50% {/* 改变自定义变量的值 */--x: 100px;/* 改变元素的背景颜色 并使用!important */background: yellow !important;}
}
.d {/* 定义一个自定义变量 */--x: 0px;width: 100px;height: 100px;/* 初始背景颜色red */background: red;/* 自定义变量决定元素的偏移量 */transform: translateX(var(--x));/* 调用动画 */animation: move 2s infinite;
}

​ 答案和解析可在文章底部查看。

今日面试题:

1、 常见的HTML全局属性 ( global attribute ) 有哪些?

① class

​ 为元素设置类名,多个类名之间以空格分隔。

② id

​ 为元素设置唯一标识符id,该id要求在当前文档内唯一。

③ style

​ 为元素设置行内样式。

④ title

​ 为元素设置内容的相关信息文本,指针悬浮时会显示。可用于显示因为字数过多,被截取的文本。

⑤ data-*

​ 为元素设置自定义属性,存储元素特定数据,数据可在JS中读取。

⑥ draggable

​ 为元素设置是否可拖拽,即是否可以使用Drag and Drop API

⑦ tabindex

​ 为元素设置是否可获取焦点,值为一个整数,如果值为负数,表示元素可聚焦,但不能通过顺序键盘导航到达;值为0,表示元素可聚焦,且可以通过顺序键盘导航到达,但具体顺序取默认顺序;值为正数,表示元素可以可聚焦,且可以通过顺序键盘导航到达,具体顺序取决于值的相对大小顺序。如果多个元素的值相同,则顺序取决于元素在文档中的先后顺序。

⑧ autofocus

​ 为元素设置在页面加载时自动聚焦。

⑨ hidden、lang、contenteditable等其他全局属性。

2、谈谈Canvas和SVG两者的区别

① 基本概念

Canvas:是HTML5新增用于绘制2D图形的API,可以通过JS操作相关的API,在对应的<canvas>元素上,绘制图形。输出的是标量图形,在被放大后会出现失真和锯齿。

SVG:是一种标准的图形格式,基于XML的矢量图形格式,通过在 HTML 中编写 SVG 代码,绘制图形。输出的图像能够被无限放大而不失真或降低质量。

② 绘制方式

Canvas:使用的是基于像素绘制的方式,每次操作都会直接修改画布上的像素,不保留绘制图形的结构信息,只保留最终的像素结果。也就是说如果要修改图像上的某一块区域,需要重新绘制整个画布,因为没有保留该区域的独立信息。

SVG:使用的是矢量绘制的方式,矢量图形通过数学公式描述图形的形状和位置,每个图形元素都是独立的对象,保存在 DOM 树中,可以通过 CSS 和 JS 对单独的图形元素进行操作和修改。

③ 绘制性能

Canvas:由于是基于像素的绘制方式,修改图形时直接操作像素,因此在复杂的动画和大量图形操作等高频率重绘的场景下,性能较好。

SVG:在复杂的动画和大量图形操作等高频率重绘的场景下,性能不如Canvas,因为每个图形元素都是独立的 DOM 节点,而操作DOM需要一定的性能开销。但在绘制静态图形、无需频繁更新图形时,性能较好。

④ 操作复杂性

Canvas:提供了一系列API,每次更新图形,都需要通过JS调用API来操作重绘,越复杂的图形,越需要编写复杂的JS代码。而且只能对整体图形进行重绘,无法对单个图形元素进行操作。

SVG:通过 XML 描述图形,每次更新图形,可以直接在修改相应的SVG代码,语法相对简单,并且可以通过CSS和JS直接对单个图形元素进行操作。

⑤ 可交互性

Canvas:只保留最终的像素结果,不存在单独的图形对象,无法只对单个图形元素进行交互、事件监听等操作。可以结合图形坐标和鼠标点击坐标,实现一定的交互。

SVG:每个图形元素都是独立的对象,独立的DOM节点,可以直接为其添加事件监听器,与元素进行交互。

⑥ 兼容性

Canvas:是HTML5标准的一部分,现代浏览器和大多数移动设备都支持。可以通过 JavaScript 检测当前浏览器是否支持 Canvas。

function isCanvasSupported() {const elem = document.createElement('canvas');return !!(elem.getContext && elem.getContext('2d'));
}

SVG:是一种标准的图形格式,现代浏览器和大多数移动设备都支持。可以通过 JavaScript 检测当前浏览器是否支持 SVG。

function isSVGSupported() {return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;
}
⑦ 适用场景

Canvas:适用于需要高性能绘图的场景,如游戏开发、实时数据可视化、大量动画效果等。

SVG:适用于需要高质量图形和交互的场景,如图标、图表、简单动画、地图等。

3、页面绘制一个可点击的圆形区域的方法有哪些?

① border-radius

border-radius 用于设置元素的圆角,如果元素的四个圆角的值为元素宽高的一半,则元素区域会变成圆形。

.d { width: 100px;height: 100px;border-radius: 50%;background-color: green;
}
② SVG

​ SVG提供了一个<circle>元素,用于创建圆形。(cx, cy)表示圆心的坐标,r 表示半径,fill表示图形颜色。

<svg width="100" height="100" onclick="alert('Circle clicked!')"><circle cx="50" cy="50" r="50" fill="green" style="cursor: pointer;" />
</svg>
<map><area>

<map><area> 标签是 HTML 中用于创建图像映射(Image Map)的标签。通过与<img> 图像标签结合使用,允许在一张图片上定义一个或多个可点击的区域。

<map>name属性指定图像映射的名称,该名称要与目标图像的usemap属性相同。

<area>shape属性指定可点击区域的形状,coords属性指定圆心和半径。

<img src="../assets/circle2.jpg" style="width: 100px;height: 100px;" usemap="#circlemap" alt="一个包含圆形的图片,宽高为100*100">
<map name="circlemap"><area shape="circle" coords="50,50,50" href="javascript:void(0);" onclick="alert('Circle clicked!')" alt="Circle">
</map>

今日一题答案:不能

实际动画效果:

在这里插入图片描述

解析:

​ 该题目主要考察的是对CSS中帧动画中@keyframes 规则的掌握情况。考察的点有两个:关键帧中的!important和关键帧中的自定义属性。

① 关键帧中的!important

​ CSS规范中明确规定在 @keyframes 的关键帧中,如果在样式属性后面使用!important,将会导致该属性被忽略,不起作用。因为关键帧动画的工作机制与普通的CSS样式规则不同,关键帧在动画执行时会被浏览器逐帧计算和渲染,为了确保动画的平滑和一致性,浏览器需要完全控制这些关键帧的样式计算过程。

​ 因此本题代码中的background: yellow !important; 属性将会被忽略,执行动画过程中元素的背景颜色不会发生改变。

② 关键帧中的自定义属性

​ CSS的自定义属性是指以--开头的声明的变量,其可以通过var(--属性名)的形式调用。自定义属性可以在关键帧中使用,可以被正常渲染。

​ 如果在关键帧中通过修改自定义属性的值,从而修改元素的样式,虽然样式会正常发生改变,但是无法实现平滑的动画效果。因为CSS 自定义属性的值对于浏览器来说相当于一个字符串,字符串的变化属于是不连贯的属性,浏览器无法对其进行插值计算,无法补全中间的关键帧,也就无法实现平滑的动画效果。

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

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

相关文章

QScrollArea应用范例,包含完整代码

QScrollArea使用案例,如果只是拖控件,做简单的布局那应该不难,但如果在复杂的布局中,用纯代码的方式来应用QScrollArea还是有点繁琐的,下面我写一段话,可能会有点绕 你需要先将widget添加到scrollArea,然后再将scrollArea添加到它要去的layout然后再设置scrollArea里的w…

【操作系统】每日 3 题(十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

销售管理SCRM助力企业高效提升业绩与客户关系管理

内容概要 在当今这个快速变化的市场环境中&#xff0c;企业面临着日益加剧的竞争&#xff0c;寻找更高效的销售管理工具显得尤为重要。销售管理SCRM不仅是一个单纯的客户关系管理工具&#xff0c;更是推动企业业绩提升的重要助力。在这一背景下&#xff0c;SCRM以其独特的优势…

JAVA基础-多线程线程池

文章目录 1. 多线程1.1什么是多线程&#xff08;1&#xff09;并发和并行&#xff08;2&#xff09;进程和线程 1.2多线程的实现方式1.2.1 方式一&#xff1a;继承Thread类1.2.2 方式二&#xff1a;实现Runnable接口1.2.3方式三: 实现Callable接口 1.3 常见的成员方法1.3.1 设置…

【日记】清仓了三个基金(1199 字)

正文 今天好忙。而且是瞎忙。主要是办公室找的家具厂不靠谱&#xff0c;上次桌子尺寸量错了&#xff0c;得换。今天拿了新的来&#xff0c;又要腾一遍东西。上午时间就没了。 那个疑似洗钱的客户又来了。他开户意愿真的好强烈。没办法&#xff0c;上午把账号给他开了出来&#…

微服务的注册中心Nacos

前言 Nacos是阿里巴巴开源的服务注册中心以及配置中心&#xff0c;致力于给开发者提供一款便捷、简单上手的开源框架。 Nacos究竟有什么惊人的地方呢&#xff1f;看下图&#xff1a; 从上图不难看出阿里巴巴的野心&#xff0c;一个Nacos干掉了Spring Cloud的三大组件&#xf…

怎么启动python脚本文件

创建一个简单的python入门代码&#xff0c;以便示范。 存储文件并复制该python文件的存储路径。 使用cd 命令切换工作目录到python文件所在的目录。 输入变量环境中的python路径和python文件的名字。 回车执行后&#xff0c;可完成命令行的python文件运行。

vue2-vuex详解

目录 vuex构建vuex[多组件数据共享]环境创建一个空仓库核心概念 - state状态核心概念 - mutations方法mutations语法 核心概念 - actions处理异步操作核心概念 - getters核心概念 - 模块module(进阶语法) vuex 是什么 vuex是一个状态管理工具&#xff0c;状态就是数据 vuex是一…

苍穹外卖-day03

公共字段自动填充新增菜品菜品分页查询删除菜品修改菜品 功能实现&#xff1a; 菜品管理 1. 公共字段自动填充 1.1 问题分析 在上一章节我们已经完成了后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改…

最简单解决NET程序员在centos系统安装c#网站

目前随着技术栈转移&#xff0c;c#程序员如何在linux服务器中部署net程序呢&#xff1f; 我做了一次实验&#xff1a;一般来说runtime和sdk都要装。 1.centos系统内命令行输入命令 sudo yum install dotnet-sdk-6.0 安装6.0版 2.检测下是否成功&#xff1a;dotnet --versio…

【HarmonyOS——MVVM模式 | 理解MVVM模式,看这一篇就够了】

大家好&#xff0c;我是学徒小z&#xff0c;近期项目开发中遇到一些数据源放置混乱的问题&#xff0c;所以带来一篇MVVM模式的文章 文章目录 MVVM模式为什么要用MVVM模式对于鸿蒙中MVVM模式的疑惑ArkUI的MVVM项目结构中的MVVM1. 概述2 .分层说明3. 架构核心原则不可跨层访问下…

网络基础:http协议和内外网划分

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频https://space.bilibili.com/350329294 一&#xff0c;H…

【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

CS61b part6

8.6 Implementation Inheritance and Default Method 让我们谈谈另一种类型的继承&#xff0c;这种继承与之前的关系紧密但精神上却非常不同&#xff0c;这种新的继承类型称为实现继承。我们之前看到的是接口继承&#xff0c;在这种方法中&#xff0c;子类获得了方法的签名&am…

C++——异常

异常是在程序执行的过程中发生了某种错误&#xff0c;异常的处理机制允许我们讲发生的异常抛出给程序的另外一部分&#xff0c;对这个错误进行处理。这个机制让问题检测的环节和问题处理的环节分离。检测环节只需要负责检测即可&#xff0c;无需关系解决的细节问题。在C语言中处…

『VUE』19. scope避免组件之间样式互相覆盖(详细图文注释)

目录 使用多个组件带有样式分析如何避免css覆盖总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 使用多个组件带有样式 ComPonent1.vue <template><h3>ComPonent1.vue</h3> </template><script&g…

CUDA解说

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一种并行计算平台和编程模型。 它允许开发者使用NVIDIA的GPU&#xff08;图形处理单元&#xff09;进行通用计算&#xff0c;即GPGPU&#xff08;General-Purpose computing on Graphics P…

海量日志收集ELK实战(docker部署ELK)从日志中挖取宝贵数据

文章目录 一、准备工作1.1 服务器配置要求1.2 关闭防火墙1.3 创建docker网络 二、docker安装elasticsearch2.1 下载 Elastic Search 镜像2.2 创建宿主机的挂载目录2.3 设置宿主机max_map_count2.5 docker启动命令2.6 关闭es容器密码安全验证2.7 重启es容器2.8 测试安装成功2.9 …

nacos占用内存过高问题

1. 问题 在微服务项目的学习和开发过程中&#xff0c;服务注册中心 Nacos 是一个必不可少的组件。Nacos 提供了服务注册、配置管理等核心功能&#xff0c;使得分布式服务可以轻松实现互相发现、负载均衡和动态配置。然而&#xff0c;许多微服务项目中包含多个模块&#xff0c;…

JavaScript核心编程 - 原型链 作用域 与 执行上下文

原型 在JavaScript中&#xff0c;每个对象都有一个内部属性&#xff0c;称为__proto__&#xff08;在ES6中&#xff0c;这个属性被Object.getPrototypeOf()和Object.setPrototypeOf()方法标准化&#xff09;&#xff0c;这个属性指向该对象的原型。原型本身也是一个对象&#…