1. 线性渐变 (linear-gradient)

  • 线性渐变是沿着一条直线上从一种颜色平滑过渡到另一种颜色的效果。
  • 语法:linear-gradient(direction, color-stop1, color-stop2, ...)
  • 示例:linear-gradient(to right, red, blue) 从左到右,红色逐渐过渡到蓝色。

2. 径向渐变 (radial-gradient)

  • 径向渐变是从中心向外扩展的圆形或椭圆形的渐变效果。
  • 语法:radial-gradient(shape size at position, start-color, ..., end-color)
  • 示例:radial-gradient(circle at center, red, blue) 在中心从红色渐变到蓝色。

3. 渐变方向

  • 对于 linear-gradient,方向可以是角度(例如,45deg)或方位词(例如,to right)。
  • 对于 radial-gradient,位置由 at x% y% 指定,表示渐变中心的位置。

4. 颜色停止点 (color-stop)

  • 渐变中的每个颜色停止点指定了颜色和渐变位置。
  • 颜色可以使用 rgba()、hsla() 或其他 CSS 颜色函数。

5. 透明度

  • 可以通过 rgba 或 hsla 指定颜色的透明度(alpha 值)。这使得背景颜色与渐变更好地混合在一起,创造出复杂的视觉效果。
radial-gradient(at 17% 0%, hsla(281deg, 0%, 94%, 1) 0, transparent 50%)
  • 渐变中心位置:元素的 17% 水平位置和 0% 垂直位置。
  • 渐变开始颜色:hsla(281deg, 0%, 94%, 1),表示浅灰色,完全不透明。
  • 渐变结束颜色:transparent,表示完全透明。
  • 渐变过渡范围:从中心到50%的径向范围内完成颜色的渐变。

void 的含义

void 是 JavaScript 的一个运算符,用于计算一个表达式但不返回任何值。void 0 常用于生成 undefined 值,以确保其值始终为 undefined

void 0 是一个确保结果为 undefined 的表达式(即使 undefined 被重新赋值也不会影响 void 0 的结果)

在这里,void 0 !== arguments[3] 是为了安全地检查第四个参数是否被定义。

&& (逻辑与)

  • 规则: && 运算符会从左到右依次求值,直到找到第一个 false 值。如果所有表达式都为 true,则返回最后一个表达式的值;如果某个表达式为 false,则直接返回该 false 值,并停止进一步的求值。

  • 应用

var n = 3 < arguments.length && void 0 !== arguments[3] && arguments[3];
  • 解释: 在这里,&& 用于连接多个条件。如果 3 < arguments.length 为 true,继续判断 void 0 !== arguments[3];如果也为 true,再判断 arguments[3] 的值,并将其赋值给 n。如果任何一个条件为 falsen 将会被赋值为该 false 值。

  • 总结: 只有在所有条件都为 true 的情况下,n 才会被赋值为 arguments[3] 的值;否则,n 会被赋值为第一个 false 条件的值。

|| (逻辑或)

  • 规则: || 运算符也从左到右依次求值,但它会返回第一个 true 的表达式值,并停止进一步的求值。如果所有表达式都为 false,则返回最后一个表达式的值。

  • 应用
    如果将 && 替换为 ||

    var n = 3 < arguments.length || void 0 !== arguments[3] || arguments[3];
  • 解释: 在这种情况下,n 将被赋值为第一个 true 条件的值。如果 3 < arguments.length 为 truen 将立即被赋值为 true,并停止进一步判断。如果 3 < arguments.length 为 false,则检查 void 0 !== arguments[3],依此类推。

  • 总结: 只要有一个条件为 truen 就会被赋值为第一个 true 条件的值;如果所有条件都为 falsen 将被赋值为最后一个条件的值。

逗号运算符在 JavaScript 中是一个少见但非常有用的运算符,它允许在一行代码中执行多个表达式,并返回最后一个表达式的值。

逗号运算符的含义

规则: 使用逗号运算符时,表达式会从左到右依次执行,每个表达式都会被计算,但只有最后一个表达式的值会被返回。

在 t 变量中的应用:

t = ((r.items = t),
    gtm4wp_clear_ecommerce &&
    window[gtm4wp_datalayer_name].push({ ecommerce: null }),
    { event: e, ecommerce: r });
  • 解释: 这里逗号运算符用于执行一系列操作:
  1. r.items = t:将 t 赋值给 r.items,用于将商品列表存入 r 对象中。

  2. gtm4wp_clear_ecommerce && window[gtm4wp_datalayer_name].push({ ecommerce: null }):如果 gtm4wp_clear_ecommercetrue,则将 { ecommerce: null } 推送到 dataLayer,清空之前的电子商务数据。

  3. { event: e, ecommerce: r }:这是逗号表达式的最后一个表达式,它的值将赋值给 t。

  • 总结: 尽管逗号运算符前的每个表达式都会被执行,但最终 t 的值是 { event: e, ecommerce: r } 这个对象。

在变量赋值时使用逗号运算符

  • 可行性: JavaScript 确实允许在变量赋值时使用逗号运算符。这可以在单行代码中执行多个表达式,最后将最后一个表达式的值赋给变量。

  • 使用场景: 这种写法通常用于代码简化或在需要执行一系列操作但只关心最终结果的场合。需要注意的是,虽然这种用法很强大,但过度使用可能会降低代码的可读性。

当选择颜色作为品牌或网站的主题色时,以下几个方面的色彩知识和逻辑非常重要:

1. 颜色心理学

  • 金棕色(#D39D4E):象征着温暖、舒适、传统和可靠性,适用于与自然、工艺、复古、和谐相关的品牌。
  • 深蓝色(#0022B5):传递着信任、稳定、专业和智慧的感觉,适用于金融、科技、教育和企业形象品牌。
  • 亮红色(#F40000):强烈、活泼、充满能量的颜色,适合用于强调、警示、促销等场景,但需谨慎使用,避免过度刺激。

2. 品牌联想

  • 品牌一致性:颜色应该与品牌的核心价值、目标市场和品牌个性一致。例如,使用深蓝色可以增强品牌的可信度和专业性,红色则可以传达激情和紧迫感。
  • 市场区隔:确保颜色在目标市场中独特且具有识别度,避免与竞争品牌过于相似。

3. 颜色组合

  • 互补色搭配:考虑颜色在网站或品牌设计中的搭配,例如,金棕色可以与深蓝色搭配,创造出稳定且温暖的视觉效果。
  • 对比与平衡:使用亮红色等强烈的颜色时,需要用中性色或柔和的颜色来平衡,避免视觉上的疲劳。

4. 文化与地域因素

  • 不同的文化对颜色的解读可能不同。例如,红色在中国文化中通常代表好运和喜庆,但在西方文化中可能更多与警告或危险联系在一起。
  • 确保颜色在品牌的全球市场中不会引起误解或负面联想。

5. 色彩的可访问性

  • 确保颜色在不同设备和显示器上具有良好的可读性和可视性,并考虑到色盲用户的体验。高对比度的颜色搭配有助于提升可读性。

在设计网站的配色方案时,需要一个既能传达品牌个性又能保证视觉舒适的配色方案。以下是一些专业的思路和逻辑:

1. 主色调、强调色与次要色的运用

主色调(Primary Color):

  • 主色调是品牌或网站的核心颜色,通常在logo、导航栏、主要按钮、背景和其他关键元素中使用。
  • 对于电竞椅这种产品,你可以选择一个代表活力和力量的颜色,如深蓝色或红色,也可以选择一个柔和且不失专业的颜色,如深灰或深绿。
  • 主色调的饱和度和明度应与品牌定位一致。高饱和度的颜色通常更引人注目,适合与电竞相关的产品,而较低饱和度的颜色则更适合居家办公的氛围。
  • 例如,深蓝色(#0022B5)可以作为电竞相关的主色调,而一个浅灰色(如#F6EBDC)可以作为与办公相关的背景色。

强调色(Accent Color):

  • 强调色用于引导用户注意关键操作,如CTA按钮、链接或重要提示。这些颜色通常与主色调形成对比,以确保足够的视觉吸引力。
  • 选择时要确保强调色与主色调和谐搭配,同时足够显眼。例如,如果主色调是深蓝色,亮橙色或亮红色可以作为有效的强调色。
  • 对于重要的CTA行动按钮,红色(如#F40000)可以是一个很好的选择,因为它能吸引用户的注意。

次要色/辅助色(Secondary Color):

  • 次要色或辅助色用于平衡整体设计,通常应用于背景、分隔线或次要信息。
  • 这些颜色的饱和度和明度通常比主色调低,以避免分散用户的注意力。例如,可以从主色调中通过调节明暗度或饱和度来生成辅助色。
  • 例如,金棕色(#D39D4E)可以通过调节明度得到浅金色(如#F6EBDC),适合用作公告栏或背景色。

2. 配色方案的开发与设计规范

色彩心理学与用户体验:

  • 颜色在不同文化和场景中的意义不同。在网站设计中,必须考虑到目标用户的偏好和文化背景。例如,蓝色常用于传递信任与专业性,而红色用于警示和行动。
  • 通过合理选择和搭配颜色,可以增强用户的情感体验,提高用户的交互效率。

色彩对比与层次感:

  • 使用对比色可以在不同元素之间建立层次感,帮助用户更好地理解和浏览页面内容。
  • 避免在大面积区域使用高饱和度或亮色,以免造成视觉疲劳。在设计产品卡片或分区背景时,灰色(如#F1F1F1)常用来提供视觉休息点,并突出主要内容。

色彩一致性:

  • 确保整个网站的配色风格一致,包括文字、图标、按钮、背景等。这有助于建立品牌识别度,并提供一致的用户体验。

3. 专业色卡工具

  • Color Hunt

  • Coolors

  • Adobe Color

  • Material Design Color Tool

4. 开发与设计的思路和规范

  • 逐步迭代:从一个主色调开始,逐渐添加辅助色和强调色。不断测试这些颜色的组合效果,并根据实际视觉效果进行微调。
  • 可访问性:确保颜色组合符合可访问性标准,如对比度合适,能为所有用户提供良好的视觉体验。
  • 一致性检查:在不同页面、设备和分辨率下检查颜色的一致性,确保在各种情况下都有良好的显示效果。

控制比特率

可以通过设置比特率来压缩视频。比特率是决定视频文件大小的主要因素之一。以下命令将视频比特率设置为 1000k:

ffmpeg -i input.mp4 -b:v 1000k output.mp4

这个命令会以 1000k 的比特率重新编码视频,压缩后的视频质量可能会略有下降,但文件大小会减小。

使用 CRF(Constant Rate Factor)模式

CRF 是 FFmpeg 中一种在质量和文件大小之间取得平衡的模式。CRF 值的范围为 0-51,数值越低,质量越高,文件越大。通常,23 是默认值,18-23 被认为是较好的平衡点。你可以使用以下命令来压缩视频:

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 output.mp4

这个命令使用 libx264 编码器,并通过设置 -crf 值来压缩视频,同时保持较好的视频质量。

调整分辨率:

如果允许降低分辨率,你可以使用 -vf 参数调整视频的分辨率,从而进一步减小文件大小:

ffmpeg -i input.mp4 -vf "scale=1280:720" -crf 23 output.mp4

这个命令将视频的分辨率调整为 1280x720,并使用 CRF 23 进行压缩。

音频压缩:

除了视频压缩外,调整音频比特率也能有效减少文件大小。以下命令将音频比特率设置为 128k:

ffmpeg -i input.mp4 -b:a 128k output.mp4

可以结合视频和音频的设置一起使用:

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -b:a 128k output.mp4

不降低视频质量的压缩

在不明显降低视频质量的情况下,使用 CRF 模式并控制在适当的范围(如 18-23)是一个较为通用的做法。此外,调整音频比特率并确保分辨率符合需求,也能在不牺牲太多质量的前提下有效压缩文件大小。

ffmpeg -i inputfile [options] outputfile
  • -i inputfile:指定输入文件。
  • [options]:用于设置输出的选项,如编码格式、比特率等。
  • outputfile:指定输出文件的路径和名称。

查看文件信息

使用以下命令可以查看视频文件的详细信息,如编码格式、分辨率、比特率等:

ffmpeg -i input.mp4
  • 帧率的单位是:FPS 是指每秒帧数(Frames Per Second)简写:P,“如 30 fps 和 30 p 指的都是每秒钟播放 30 张图片的意思” 。
  • 高低帧率:低帧率会伴随模糊、卡顿、镜头移动时不顺畅等问题,但也不是越高越好,会造成眩晕的感觉。
  • 不同帧率的视频在不同设备上播放: ① 若一个播放设备最高支持 60fps,在此设备上播放 120fps 的影片,则播放设备会每隔一张删除 120fps 的影片,被删除的图片成为无效帧。 这就导致高帧率的影片在低帧率的设备上播放时,会降低播放流畅度。 ② 若一个播放设备最高支持 120fps,在此设备上播放 60fps 的影片,则播放设备会每将每张图片复制一张,以填补空缺的帧。但是效果和 60fps 的设备上播放一样,对播放流畅度没有提升。

帧率是直接影响流畅度的指标,视频一般 24FPS/25FPS 已经足够,低于 24 将会感到卡顿。

非常非常重要的一个参数。

码率就是数据传输时单位时间(1s)传送的数据位数,一般我们用的单位是 kbps 即千位每秒。

码率与体积的关系:

  • 在相同的时间下,码率越大,体积就越大。
  • *存储体积 = 码率 时间。**

码率与画质的关系:

  • 同样分辨率下,视频文件的码率越大,压缩比就越小,画面质量就越高。码率越高,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。

  • 编码模式 码率取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真,围绕这个核心衍生出来 cbr(固定码率)、vbr(可变码率)、abr(平均码率);

CBR: constant bitrate(固定码率)

  • 以恒定比特率方式进行编码,有运动发生时,由于码率恒定,只能通过增大 QP 来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。

  • 这种算法优先考虑码率(带宽)。适合在流式播放中应用。

  • CBR 编码的缺点在于编码内容的质量不稳定,容易产生马赛克。因为对于某些较复杂的图像比较难压缩,所以 CBR 流的某些部分质量就比其他部分差。

VBR:variable bitrate(动态码率)

  • 比特分配根据图像内容的复杂度进行。如果图像细节较丰富或者含有大量的运动,则给其分配大一点的码流,若图像比较平坦,就给其分配较少的码流, 这样既保证了质量,又兼顾带宽限制。

  • 这种算法适合图像内容变化幅度较大的情况;

  • 适合的应用场景是媒体存储,不适合网络传输;

QVBR(Quality Variable Bit rate)质量码流

  • QVBR 在 VBR 的基础上,增加了自适应动态质量控制功能。编码器会根据图像质量目标和帧率等因素自适应调节码率,以确保图像质量。这种编码方式减少了码率的小部分波动对图像质量的影响,进一步提高了图像的清晰度和稳定性。

  • 优点:能够在保证画面质量的前提下减少码流的波动

  • 缺点:相比 VBR 需要更高的码率带宽比。

ABR:average bitrate(平均码率,是 VBR 的一种插值参数)

  • 是在 CBR 和 VBR 两者之间的一种权衡,即设定一段时间的平均码率,在此时间内,对简单,静态的图像分配低于平均码率的码率,对于复杂的,大量运动的图像分配高于平均码率的码流;

  • 适合网络传输;

CVBR:Constrained VariableBit Rate(有限码流)

  • 是 VBR 的一种改进方法,对应的 Maximum bitRate 恒定或者 Average BitRate 恒定。兼顾了 CBR 和 VBR 的优点:在图像内容静止时,节省带宽,有运动发生时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的。这种方法通常会让用户输入最大码率和最小码率,静止时,码率稳定在最小码率,运动时,码率大于最小码率,但是又不超过最大码率。