【CSS in Depth 2 精译_089】15.2:CSS 过渡特效中的定时函数

news2024/12/23 19:31:51

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第五部分 添加动效 ✔️
  • 【第 15 章 过渡】 ✔️
    • 15.1 状态间的由此及彼
    • 15.2 定时函数 ✔️
      • 15.2.1 定制贝塞尔曲线 ✔️
      • 15.2.2 阶跃 ✔️
    • 15.3 非动画属性

文章目录

    • 15.2 定时函数 Timing functions
      • 15.2.1 定制贝塞尔曲线 Custom Bézier curves
      • 15.2.2 阶跃 Steps

《CSS in Depth》新版封面

《CSS in Depth》新版封面

15.2 定时函数 Timing functions

定时函数是 CSS 过渡的重要组成部分。过渡特效实现了让某个属性从一个值 “移动”(“move”)到另一个值;而定时函数则用于描述该过程究竟是 “怎样”(“how”) 移动的:是以恒定的速度移动?还是先缓慢起步,再逐渐加速?

我们可以使用几个关键字来描述该移动过程,例如 linearease-inease-out 等。若按 linear 过渡,则属性值将以恒定的速度变化;若改为 ease-in,则变化速度开始时慢,但在过渡结束前会加快;相反,ease-out 则会减速过渡,开始时快速变化,结束时却放慢了速度。图 15.3 演示了小方块在这几种定时函数的作用下,由左侧移动到右侧时的不同过渡效果。

图 15.3 linear 过渡以恒定速度移动;而 ease-in 则加速;ease-out 则减速

【图 15.3 linear 过渡以恒定速度移动;而 ease-in 则加速;ease-out 则减速】

仅从静态图片上理解这几个过程可能有点困难,为此,让我们通过一个示例来说明,以便在浏览器中实时查看不同的过渡效果。新建一个 HTML 页面并根据代码清单 15.3 添加如下 HTML 代码:

代码清单 15.3 一个简单的定时函数示例 HTML

<div class="container">
  <div class="box"></div><!-- 该小方块将从屏幕左侧过渡到右侧-->
</div>

接着,给小方块设置好颜色和尺寸大小;然后使用绝对定位,并在鼠标悬停时利用过渡特效来移动小方块的位置。最后给页面添加新样式表,将代码清单 15.4 中的样式复制到本地样式表内。

代码清单 15.4 使小方块从左侧过渡到右侧的样式代码

.container {
  position: relative;
  height: 50px;
}

.box {
  position: absolute;
  left: 0; /* 从左侧开始 */
  height: 50px;
  width: 50px;
  background-color: oklch(70% 0.18 145deg);
  transition: all 1s linear; /* 设置过渡 */
}

.container:hover .box {
  left: 400px; /* 鼠标悬停时右移 400px */
}

这样,在示例页的左上角将会得到一个绿色的小方块。当鼠标悬停到方块所在的容器上时,方块将向右侧移动。注意,此时方块将以恒定的速度做匀速运动。

警告

本例通过给元素设置绝对定位并对其 left 属性使用过渡特效,实现了元素在屏幕上匀速移动的效果。然而有一些属性因为性能原因要尽量避免使用过渡特效,其中就包括 left 属性。后续章节还会提到这些问题,届时将利用变换(transforms)来作为更好的替代方案。

现在可以试着改改过渡属性,看看不同的定时函数是怎么工作的。例如尝试 ease-in(即 transition: all 1s ease-in)或者 ease-out(即 transition: all 1s ease-out)。仅用这些关键字就能实现相应的效果了,但有时您可能希望对定时函数实现更精准的控制。这时就需要使用自己定义的定时函数。下面来看看如何实现。

15.2.1 定制贝塞尔曲线 Custom Bézier curves

定时函数是以数学定义下的贝塞尔曲线(Bézier curves)为基础的。浏览器将贝塞尔曲线作为某属性值随时间变化的函数曲线,并根据该函数算出某时刻的属性值。图 15.4 展示了几种定时函数的贝塞尔曲线以及对应的定时函数关键字。

图 15.4 定时函数的贝赛尔曲线描述了数值随时间的变化情况

【图 15.4 定时函数的贝赛尔曲线描述了数值随时间的变化情况】

这些贝塞尔曲线都是从左下方开始一直延伸到右上方。时间是从左向右推进的,而曲线则描述了该数值从开始到抵达终点前的数值变化过程。线性定时函数 linear 的变化率在整个过渡过程中一直保持稳定,呈现为一条直线。其余定时函数为曲线,代表加速和减速变化。

然而,我们不应该局限在这五种关键字上。我们也可以定义自己的三次贝塞尔曲线(cubic Bézier curve),实现更温和(gentle)或更强烈(drastic)的过渡效果。甚至可以添加一些“回弹”(“bounce”)效果。下面就来一试身手。

在刚才创建的页面中,打开开发者工具 DevTools 并检查绿色小方块元素。在 Chrome 浏览器的 “样式(Styles)” 面板或者 Firefox 浏览器的 “规则(Rules)” 面板中,您将看到定时函数旁边有一个小小的标志符,单击该标志符会打开一个弹窗。您可以在该弹窗中修改定时函数曲线(如图 15.5 所示)。

图 15.5 在 Chrome 浏览器的开发者工具中编辑贝塞尔曲线

【图 15.5 在 Chrome 浏览器的开发者工具中编辑贝塞尔曲线】

在弹窗左侧的操作界面上,提供了一系列预定义的贝塞尔曲线。尽管 Firefox 提供的内置曲线比 Chrome 浏览器更多,但 Chrome 浏览器支持通过底部的左右小箭头来循环预览其他选项。您也可以点击其中某条曲线进行选择。而在操作界面的右侧则会放大展示选中贝塞尔曲线的具体情况。

曲线的每个末端都有一条短直线(即 控制柄(handles);直线上附带的小圆点,称为 控制点(control points。点击并拖动小圆点则可以改变曲线形状,注意观察控制柄的长度和方向是如何 “牵引”(“pulls”) 曲线的。

点击弹窗外部区域就可以关闭该弹窗,此时定时函数已然更新,之前类似 ease-out 的关键字不见了,取而代之的是像 cubic-bezier(0.45, 0.45, 0.55, 0.95) 这样的值。cubic-bezier() 函数和其中的四个参数共同组成了我们自定义的定时函数。

关于定时函数的选取 Selecting a timing function

无论是使用关键字形式的定时函数还是自定义贝塞尔曲线版本,了解什么时候该使用哪种函数都是很有必要的。每个网站或应用程序都应该包含一条减速曲线(decelerating curve)、一条加速曲线(accelerating curve)以及 linear 关键字对应的函数曲线。最佳实践是复用相同的几条曲线,提供更加一致的用户体验。

可以在下列场景中分别使用这三种函数:

  • 线性(linear —— 适用于颜色变化和淡入(fade-in)、淡出(fade-out)效果;
  • 减速(Decelerating —— 适用于用户发起的变化。当用户点击按钮或者悬停在某元素上方时,使用 ease-out 或者类似的曲线。这样用户就会看到对其输入内容的快速、即时的响应,然后元素再慢慢过渡(easing out)到最终状态。
  • 加速(Accelerating —— 适用于系统发起的变化。当内容加载完毕、或者超时事件触发时,使用 ease-in 或者类似的曲线。这样元素就可以慢慢引起用户注意,然后变化速度越来越快,直到完成最终变化。

当然,这些都不是硬性规定,只是提供了一些基本思路,如果感觉不太合适,完全可以不用遵守这些规则。有时,您可能还需要更多的曲线来实现更复杂或者更有趣的过渡效果,例如使用 ease-in-out(先加速后减速)或者回弹特效(演示案例详见第 16 章)。

下面再来深入考察一下 cubic-bezier() 函数的工作原理。图 15.6 给出了另一个曲线示例。这是一条自定义的贝塞尔曲线。该曲线在开始时加速,速度在中间位置达到最大值(即曲线上最陡峭的部分),而后开始减速。曲线位于笛卡尔网格(译注:即直角坐标系)内,其起点坐标为 (0, 0),终点坐标则为 (1, 1)

图 15.6 用贝塞尔曲线描述的某定时函数

【图 15.6 用贝塞尔曲线描述的某定时函数】

由于曲线的两个端点是固定的,因此只需要再确定两条控制柄的位置就可以定义出该曲线了。在 CSS 中,该曲线可以通过 cubic-bezier(0.45, 0.05, 0.55, 0.95) 来定义,其中的四个参数分别代表了两个控制柄(handles)上的控制点的 x 坐标和 y 坐标。

我们很难通过这些数字想象出曲线的具体形态。相比之下,利用图形界面工具来编辑贝塞尔曲线要简单、直观得多,因此我喜欢先在浏览器中编辑并测试过渡效果,然后再将生成的三次贝塞尔曲线复制到样式表中。我比较喜欢使用 DevTools 工具来完成这类任务;您也可以使用一些像 https://cubic-bezier.com 这样的在线工具。

15.2.2 阶跃 Steps

最后再介绍一种定时函数,即 steps() 函数。跟前面介绍的基于贝塞尔曲线将某个值流畅过渡到下一个值的过渡特效不同,steps() 函数是以一系列离散的、瞬时 “阶跃”(“steps”)来移动的。

阶跃函数需要两个参数:阶跃次数和一个用来表示每次变化发生在阶跃的开始还是结束的关键词(start 或者 end)。图 15.7 描述了部分阶跃函数。

图 15.7 step() 函数以阶跃递增的方式改变数值

【图 15.7 step() 函数以阶跃递增的方式改变数值】

注意,因为第二个参数值默认为 end,所以可以使用 steps(3) 来代替 steps(3, end)。想要查看阶跃函数的过渡效果,试根据代码清单 15.5 同步更新本地样式表。

代码清单 15.5 利用 steps() 函数来增加数值的示例样式代码

.box {
  position: absolute;
  left: 0;
  height: 50px;
  width: 50px;
  background-color: oklch(70% 0.18 145deg);
  transition: all 1s steps(3); /* 设置三次非连续的阶跃过渡效果 */
}

此时就不是一秒内(即过渡持续时间)流畅地从左到右移动了,时间被分成了三等分,或者说三步。每走一步,小方块就先后分别出现在起始位置、三分之一位置、三分之二位置,以及最后 1s 时移动到终点位置。

注意

默认情况下,属性值在每一步结束时发生改变,因此过渡效果不会立即开始。添加 start 关键字变为 start(3, start) 后就可以改变该默认行为。这样,过渡就会发生在每步开始时,而非结束时。

阶跃函数 steps() 的实际应用并不多见,不过 CSS-TRICKS 网站的这篇《Clever Uses for Step Easing》博文列举了大量有关该函数的创意案例,或许可以为您提供一些灵感。



关于《CSS in Depth》(中译本书名《深入解析 CSS》)

第 1 版第 2 版
读者评分原版:4.7(亚马逊);中文版:9.3(豆瓣)原版:5.0(亚马逊);中文版:暂无,待出版
出版时间原版:2018 年 3 月;中文版:2020 年 4 月原版:2024 年 7 月;中文版:暂无,待出版
原价原版:$44.99;中文版:¥139.00原版:$59.99;中文版:暂无,待出版
现价原版:$36.49;中文版:¥52.54 起步原版:$52.09;中文版:暂无,待出版
原版国内预订起步价 ¥461.00起步价 ¥750.00

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

目前已完结的章节(可进入本专栏查看详情,连载期间完全免费):

  • 第一章 层叠、优先级与继承(已完结)
    • 1.1 层叠
    • 1.2 继承
    • 1.3 特殊值
    • 1.4 简写属性
    • 1.5 CSS 渐进式增强技术
    • 1.6 本章小结
  • 第二章 相对单位(已完结)
    • 2.1 相对单位的威力
    • 2.2 em 与 rem
    • 2.3 告别像素思维
    • 2.4 视口的相对单位
    • 2.5 无单位的数值与行高
    • 2.6 自定义属性
    • 2.7 本章小结
  • 第三章 文档流与盒模型(已完结)
    • 3.1 常规文档流
    • 3.2 盒模型
    • 3.3 元素的高度
    • 3.4 负的外边距
    • 3.5 外边距折叠
    • 3.6 容器内的元素间距问题
    • 3.7 本章小结
  • 第四章 Flexbox 布局(已完结)
    • 4.1 Flexbox 布局原理
    • 4.2 弹性子元素的大小
    • 4.3 弹性布局的方向
    • 4.4 对齐、间距等细节处
    • 4.5 本章小结
  • 第五章 网格布局(已完结)
    • 5.1 构建基础网格
    • 5.2 网格结构剖析 (上)
      • 5.2.1 网格线的编号(下)
      • 5.2.2 网格与 Flexbox 配合(下)
    • 5.3 两种替代语法
      • 5.3.1 命名网格线
      • 5.3.2 命名网格区域
    • 5.4 显式网格与隐式网格(上)
      • 5.4.1 添加变化 (中)
      • 5.4.2 让网格元素填满网格轨道(下)
    • 5.5 子网格(全新增补内容)
    • 5.6 对齐相关的属性
    • 5.7 本章小结
  • 第六章 定位与堆叠上下文(已完结)
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下)
    • 6.4 堆叠上下文与 z-index
      • 6.4.1 理解渲染过程与堆叠顺序(上)
      • 6.4.2 用 z-index 控制堆叠顺序(上)
      • 6.4.3 深入理解堆叠上下文(下)
    • 6.5 粘性定位
    • 6.6 本章小结
  • 第七章 响应式设计(已完结)
    • 7.1 移动端优先设计原则(上篇)
      • 7.1.1 创建移动端菜单(下篇)
      • 7.1.2 给视口添加 meta 标签(下篇)
    • 7.2 媒体查询(上篇)
      • 7.2.1 深入理解媒体查询的类型(上篇)
      • 7.2.2 页面断点的添加(中篇)
      • 7.2.3 响应式列的添加(下篇)
    • 7.3 流式布局
    • 7.4 响应式图片
    • 7.5 本章小结
  • 第八章 层叠图层及其嵌套
    • 8.1 用 layer 图层来操控层叠规则(上篇)
      • 8.1.1 图层的定义(上篇)
      • 8.1.2 图层的顺序与优先级(下篇)
      • 8.1.3 revert-layer 关键字(下篇)
    • 8.2 层叠图层的推荐组织方案
    • 8.3 伪类 :is() 和 :where() 的用法
    • 8.4 CSS 嵌套的使用
      • 8.4.1 嵌套选择器的使用
      • 8.4.2 深入理解嵌套选择器
      • 8.4.3 媒体查询及其他 @规则 的嵌套
    • 8.5 本章小结
  • 第九章 CSS 的模块化与作用域
    • 9.1 模块的定义
      • 9.1.1 模块和全局样式
      • 9.1.2 一个简单的 CSS 模块
      • 9.1.3 模块的变体
      • 9.1.4 多元素模块
    • 9.2 将模块组合为更大的结构
      • 9.2.1 模块中多个职责的拆分
      • 9.2.2 模块的命名
    • 9.3 CSS 的作用域
      • 9.3.1 CSS 作用域的就近原则
      • 9.3.2 划定作用域的边界
      • 9.3.3 CSS 中的隐式作用域
      • 9.3.4 关于 CSS 作用域与层叠图层
    • 9.4 CSS 模式库
    • 9.5 本章小结
  • 第十章 CSS 容器查询
    • 10.1 容器查询的一个简单示例
      • 10.1.1 容器尺寸查询的用法
    • 10.2 深入理解容器
      • 10.2.1 容器的类型
      • 10.2.2 容器的名称
      • 10.2.3 容器与模块化 CSS
    • 10.3 与容器相关的单位
    • 10.4 容器样式查询的用法
      • 10.4.1 将模块与所在容器解耦
      • 10.4.2 减少重复代码
    • 10.5 本章小结
  • 第 11 章 颜色与对比
    • 11.1 通过对比进行交流
      • 11.1.1 模式的建立
      • 11.1.2 还原设计稿
    • 11.2 颜色的定义
      • 11.2.1 色域与色彩空间
      • 11.2.2 CSS 颜色表示法(RGB、Hex、HSL、HWB、LAB/OKLAB、LCH/OKLCH)
    • 11.3 利用 OKLCH 处理颜色(上篇)
      • 11.3.4 从页面其他颜色衍生出新颜色(下篇)
    • 11.4 思考字体颜色的对比效果
    • 11.5 本章小结
  • 第 12 章 CSS 排版与间距
    • 12.1 间距设置
      • 12.1.1 使用 em 还是 px
      • 12.1.2 对行高的深入思考
      • 12.1.3 行内元素的间距设置
    • 12.2 Web 字体
    • 12.3 谷歌字体
    • 12.4 @font-face 的工作原理
      • 12.4.1 字体格式与回退处理
      • 12.4.2 同一字型的多种变体形式
    • 12.5 性能因素考量
      • 12.5.1 font-display 属性解析
      • 12.5.2 可变字体的用法
    • 12.6 调整字间距,提升可读性
      • 12.6.1 正文的字间距
      • 12.6.2 标题、小元素和间距
    • 12.7 本章小结
  • 第 13 章 渐变、阴影与混合模式
    • 13.1 渐变
      • 13.1.1 使用多个颜色节点(上)
      • 13.1.2 颜色插值方法(中)
      • 13.1.3 径向渐变(下)
      • 13.1.4 锥形渐变(下)
    • 13.2 阴影
      • 13.2.1 利用渐变和阴影打造立体感
      • 13.2.2 使用扁平化设计创建元素
      • 13.2.3 创建混合风格的按钮外观
    • 13.3 混合模式
      • 13.3.1 为图片上色
      • 13.3.2 混合模式的类型
      • 13.3.3 图片纹理的添加
      • 13.3.4 融合混合模式的用法
    • 13.4 本章小结
  • 第 14 章 蒙版、形状与剪切
    • 14.1 滤镜
      • 14.1.1 滤镜的类型
      • 14.1.2 背景滤镜
    • 14.2 蒙版
      • 14.2.1 带渐变效果的蒙版特效
      • 14.2.2 基于亮度来定义蒙版
      • 14.2.3 其他蒙版属性
    • 14.3 剪切路径
      • 14.3.1 多边形的裁剪路径
      • 14.3.2 Firefox 内置的剪切路径工具
      • 14.3.3 其他剪切路径类型
    • 14.4 浮动与形状
      • 14.4.1 浮动
      • 14.4.2 形状的定义
    • 14.5 本章小结
  • 附录
    • 附录A:CSS 选择器参考
    • 附录B:CSS 预处理器简介

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

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

相关文章

一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器

大家好&#xff0c;今天给大家分享一个开源的自托管虚拟浏览器项目Neko&#xff0c;旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;提供…

AW36518芯片手册解读(3)

接前一篇文章&#xff1a;AW36518芯片手册解读&#xff08;2&#xff09; 二、详述 3. 功能描述 &#xff08;1&#xff09;上电复位 当电源电压VIN降至预定义电压VPOR&#xff08;典型值为2.0V&#xff09;以下时&#xff0c;该设备会产生复位信号以执行上电复位操作&#x…

浅谈目前我开发的前端项目用到的设计模式

浅谈目前我开发的前端项目用到的设计模式 前言 设计模式很多&#xff0c;看到一个需求&#xff0c;项目&#xff0c;我们去开发的时候&#xff0c;肯定是做一个整体的设计进行开发&#xff0c;而在这次我项目中&#xff0c;我也做了一个整体的设计&#xff0c;为什么要设计&a…

线性规划中的几种逻辑表达式

线性规划中的几种逻辑表达式 注意&#xff1a; 摘录字刘博士的《数学建模与数学规划》&#xff0c; 以便用时可查。 实际上Gurobi API 中自身放啊变的逻辑表达式函数&#xff0c;下面列出自定义的实现方式。 1 逻辑与 如果 x 1 1 x_1 1 x1​1, x 2 1 x_2 1 x2​1, 那…

JVM对象分配内存如何保证线程安全?

大家好&#xff0c;我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全&#xff1f;】面试题。希望对大家有帮助&#xff1b; JVM对象分配内存如何保证线程安全&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中&#xff0c;对象的内存分配…

Antd react上传图片格式限制

限制分辨率&#xff08;像素&#xff09; <a-upload :before-upload"beforeUpload">// 上传图片宽高比例限制const beforeUpload file > {return new Promise((resolve, reject) > {// // 图片类型限制// let isJpgOrPng file.type image/png || fil…

基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作

协议设计目标 1. 安全性&#xff1a;通过 iAP2 协议与 MCU 设备进行安全通信。 2. 通用性&#xff1a;支持对安防设备的常见功能进行操作&#xff0c;如状态查询、设备控制、参数配置等。 3. 高效性&#xff1a;数据结构简洁清晰&#xff0c;易于解析和扩展。 4. 扩展性&#x…

Type-C单口便携屏LDR6021

随着科技的飞速发展&#xff0c;便携式电子产品在我们的日常生活中扮演着越来越重要的角色。在这一背景下&#xff0c;Type-C单口便携显示器作为一种新兴的显示设备&#xff0c;凭借其独特的优势迅速崭露头角&#xff0c;成为市场的新宠。本文将深入探讨Type-C单口便携显示器的…

Ubuntu 20.04 卸载和安装 MySQL8.0

卸载 首先&#xff0c;检查一下系统安装的软件包有哪些&#xff0c;使用dpkg -l | grep mysql命令&#xff1a; 为了将MySQL卸载干净&#xff0c;这些文件都需要被删除。 在Ubuntu20.04系统下&#xff0c;卸载干净MySQL8.0以确保下一次安装不会出错&#xff0c;可以按照以下…

NOTEBOOK_11 汽车电子设备分享(工作经验)

汽车电子设备分享 摘要 本文主要列出汽车电子应用的一些实验设备和生产设备&#xff0c;部分会给予一定推荐。目录 摘要一、通用工具&#xff1a;二、测量与测试仪器2.1测量仪器2.2无线通讯测量仪器2.3元器件测试仪2.4安规测试仪2.5电源供应器2.6电磁兼容测试设备2.7可靠性环境…

黑马Java面试教程_P8_并发编程

系列博客目录 文章目录 系列博客目录前言1.线程的基础知识1.1 线程和进程的区别&#xff1f;难2频3面试文稿 1.2 并行和并发有什么区别&#xff1f; 难1频1面试文稿 1.3 创建线程的四种方式 难2频4面试文稿 1.4 runnable 和 callable 有什么区别 难2频3面试文稿 1.5 线程的 run…

【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap

re:Invent 是全球云计算领域的顶级盛会&#xff0c;每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂&#xff0c;分享最新的技术成果和创新实践&#xff0c;深圳 UG 作为亚马逊云科技技术社区的重要组成部分&#xff0c;将借助 re:Invent 的东风&#xff0c;举办此…

一起学Git【第二节:创建版本库】

创建库 这个库相当于一个目录&#xff0c;目录中的文件都被Git管理&#xff0c;会记录每个文件的修改删除和添加工作&#xff0c;便于之后随时跟踪历史记录还原到之前的某一版本。如何创建库呢&#xff1f;有两种方式&#xff0c;本地创建库和云端克隆一个库。 1.本地创建库 …

本地部署webrtc应用怎么把http协议改成https协议?

环境&#xff1a; WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述&#xff1a; 本地部署webrtc应用怎么把http协议改成https协议&#xff1f; http协议在安卓手机浏览器上用不了麦克风本&#xff0c;来地应用webrtc 本来是http协议&#xff0c;在安卓手机上浏览器不支持使…

web实操8-cookie

会话技术 会话&#xff1a; 一次会话中包含多次请求和响应。 客户端浏览器访问服务器的资源&#xff0c;只要客户端或者服务器端不关闭&#xff0c;这始终在一次会话范围内&#xff0c;这一次会话范围内可以包含多次请求并且收到多次相应。 一次会话&#xff1a;浏览器第一…

vue2 - Day03 - (生命周期、组件、组件通信)

文章目录 一、生命周期1. 创建阶段2. 挂载阶段3. 更新阶段4. 销毁阶段5. 错误捕获总结 二、组件2.1 注册1. 全局注册 - 公共的组件。2. 局部注册总结 2.2 三大重要的组成部分1. 模板 (Template)主要功能&#xff1a;说明&#xff1a; 2. 脚本 (Script)主要功能&#xff1a;说明…

java日常工作开发高并发问题

前言 本篇文章将是以工作中经常遇到的问题&#xff0c;和面试中经常遇到的java问题进行描写。内容包括微服架构&#xff0c;java并发编程以及相应的中间件的高级知识。本文所有的问题都在描述多线程编程的高级知识。 一. 面试题 1.Sychronized和ReentrantLock有哪些不同点? …

【Python】【数据分析】深入探索 Python 数据可视化:Matplotlib 绘图库完整教程

目录 引言一、什么是 Matplotlib&#xff1f;1.1 Matplotlib 的安装1.2 Matplotlib 的基本功能 二、Matplotlib 的基础绘图2.1 绘制折线图2.2 绘制柱状图2.3 绘制散点图2.4 绘制饼图 三、高级功能与定制3.1 设置图表样式3.2 使用子图3.3 保存图表 四、Matplotlib 流程图4.1 Mer…

【代码随想录|动态规划背包问题】

一、背包问题分类 01背包&#xff1a;n种物品&#xff0c;每种物品只有一个 完全背包&#xff1a;n种物品&#xff0c;每种物品有无限个 多重背包&#xff1a;n种物品&#xff0c;每种物品的个数各不相同 二、01背包问题三道题 卡码网46题.携带研究材料&#xff08;二维背包…

第1章 命题逻辑

2024年12月22日 一稿 1.1 现代逻辑学的基本研究方法 1.2 命题及其表示法 1.2.1 命题的概念 定义1.1 命题是一个可以判断真假的陈述句。 1.2.2 联结词 非 与 或 蕴含 等价 1.3 命题公式与语句形式化 1.3.1 命题公式的定义 1.3.2 公式的层次 1.3.3 语句形式化 1…