如何创建渐变 (HTML)

03/04/2016

本文内容

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

形状和线条并不是只能为纯色。用在画布中的渐变实际上是一种类型的颜色值,因此,你可以将它应用于 fillStyle 和 strokeStyle 属性。

渐变可用来在图像中产生密度或颜色在方向上的变化。 这可用于产生背景图像,指出地图中的高度,或者指出你希望向图面中添加照明和底纹的任何位置。

渐变对于简化网页非常有用,因为你可以避免针对这些效果使用图像,还可以最小化加载它们所需的带宽和时间。 而且,由于渐变是以编程方式生成的,因此可以对它们进行方便的缩放和重用。

先决条件

本主题假定你会使用 JavaScript 创建基本 Windows 应用商店应用并在该应用中使用 Windows JavaScript 库模板。有关创建第一个采用 JavaScript 的 Windows 应用商店应用的说明,请参阅创建第一个 Web 应用。有关使用 WinJS 模板的说明,请参阅“如何获取和使用 WinJS 工具包”。

说明

步骤 1: 获取呈现上下文

在将图像绘制到画布上并用渐变对图像进行着色之前,需要从 canvas 元素中获取呈现上下文。呈现上下文是用来定义绘制方法和属性的位置。

为了改进使用 JavaScript 的 Windows 应用商店应用的性能,请等待,直到 HTML 页加载后再执行 JavaScript 代码。这可通过将用来绘制图像的代码放在页面加载之后调用的函数中实现。

window.onload = drawGradient;

function drawGradient() {...

使用 getElementById 检索画布的文档对象模型 (DOM) 节点,然后使用 getContext 方法访问呈现上下文。

不同类型的呈现内容使你能够以不同的方式进行绘制。例如,2D 上下文用于 2D 图形,3D 上下文用于 3D 图形。本主题中的示例使用 2D 呈现上下文。

// Get the canvas element and specify a 2d drawing context.

var context = document.getElementById("canvas").getContext("2d");

步骤 2: 创建渐变

在拥有了呈现上下文之后,可以定义渐变。有两种类型的渐变:线性或直线渐变;径向或圆形渐变。

Linear gradient

线性渐变方法使用四个参数:

createLinearGradient(startX, startY, endX, endY)

第一组有两个参数,它们是渐变起点的 x 和 y 位置;第二组有两个参数,它们是渐变终点的 x 和 y 位置。

垂直线性渐变

在此示例中,为 myGradient 变量分配了 createLinearGradient 方法。在下一步中向渐变中添加颜色时,这一点非常有用。

var myGradient=context.createLinearGradient(0, 0, 200, 0);

若要创建垂直线性渐变,即渐变的底纹从一侧过渡到另一侧,请将渐变起点的 x 和 y 位置设置为 0 和 0,并将终点的 x 和 y 位置设置为 200 和 0。由于 y 值(第 2 个和第 4 个参数)均为 0,因此渐变的底纹会从左侧平滑过渡到右侧。

水平渐变

若要创建从顶部过渡到底部的渐变,请将 x 值(第 1 个和第 3 个参数)保持固定,并使 y 值(第 2 个和第 4 个参数)保持在 0 到画布高度这一范围内。

var myGradient=context.createLinearGradient(0, 0, 0, 100);

对角渐变

你还可以沿着对角线方向创建渐变。 在此示例中,x 和 y 值不同,它们分别设置为 200 和 100。

var myGradient=context.createLinearGradient(0, 0, 200, 100);

Radial gradient

createRadialGradient 方法使用六个参数:

createRadialGradient(startX, startY, startRadius, endX, endY, endRadius)

这些参数包括:

startX 和 startY 是画布上起始圆的 x 和 y 坐标。

startRadius 是起始圆的半径。

endX 和 endY 是画布上圆的结束圆的 x 和 y 坐标。

endRadius 是结束圆的半径。

传统的径向渐变

若要创建"传统的"径向渐变,即颜色从一个圆平滑过渡到另一个圆,需要将这两个圆的 x/y 坐标设置为同一个值,并确保一个渐变圆的 x/y 坐标大于另一个圆的 x/y 坐标。

var myGradient = context.createRadialGradient(52, 50, 10, 52, 50, 200);

不同的起始位置和结束位置

在上面的径向渐变示例中,起始位置和结束位置的 x/y 坐标相同(分别为 52 和 50),只是每个圆的半径大小从 10 增加到 200。 这会将径向渐变的底纹放在圆的中央。

如果你将起始位置和结束位置之间的距离进一步加大,你将最终获得一个锥形,就好像在画布上将渐变拉伸了一样。

var myGradient = context.createRadialGradient(32, 30, 5, 60, 60, 50);

在此示例中,起始圆的 x 和 y 坐标分别为 32 和 30,它的半径为 5。 结束圆的 x 和 y 坐标分别为 60 和 60,它的半径较大,为 50。 下面是结果:

步骤 3: 设置颜色停止点

一个渐变有两种或多种 addColorStop 方法:

addColorStop(offset, color)

若要添加颜色停止点,需要指定要应用的颜色,以及颜色沿着渐变的偏移位置。渐变位置可以是 0(渐变的起点)到 1(渐变的终点)之间的任何位置。

在我们的示例中,myGradient 变量用于将 addColorStop 设置为 0 到 1 的值,以便渐变的底纹从白色平滑过渡到黑色。

myGradient.addColorStop(0,"white");

myGradient.addColorStop(1,"black");

多个颜色停止点

你可以使用多个颜色停止点。在此示例中,第二个 addColorStop 在渐变的中间位置分配一个颜色停止点:

myGradient.addColorStop(0,"orange");

myGradient.addColorStop(.5, "green");

myGradient.addColorStop(1, "blue");

将生成下面的渐变:

步骤 4: 设置填充样式

在绘制渐变之前,必须将 fillStyle 设置为 myGradient。

context.fillStyle = myGradient;

最后,使用 fillRect 方法绘制图像:

context.fillRect(0, 0, 200, 100);

完整示例

线性渐变

此 JavaScript 代码使用 canvas 元素绘制一个矩形,然后使用对角线性渐变作为该矩形的 fillStyle。

window.onload = drawGradient;

function drawGradient() {

// Get the canvas element and specify a 2d drawing context.

var context = document.getElementById("canvas").getContext("2d");

// Create a linear gradient.

var myGradient=context.createLinearGradient(0, 0, 300, 100);

// Set the color stops.

myGradient.addColorStop(0, "white");

myGradient.addColorStop(1, "black");

// Set the fill style to the gradient.

context.fillStyle = myGradient;

// Draw the rectangle.

context.fillRect(0, 0, 200, 100);

}

径向渐变

此 JavaScript 代码使用 canvas 元素绘制一个圆,然后使用径向渐变作为该圆的 fillStyle。

window.onload = drawGradient;

function drawGradient() {

// Get the canvas element and specify a 2d drawing context.

var context = document.getElementById("canvas").getContext("2d");

// Create the radial gradient.

var myGradient = context.createRadialGradient(52, 50, 10, 52, 50, 200);

// Set the color stops.

myGradient.addColorStop(0, "white");

myGradient.addColorStop(1, "black");

// Set the fill style to the gradient.

context.fillStyle = myGradient;

// Draw a circle.

context.beginPath();

context.arc(52, 50, 40, 0, Math.PI*2, true);

context.closePath();

context.fill();

}

级联样式表 (CSS)

这是在 canvas 元素周围创建灰色边框的 CSS 的示例。

/* Style the canvas element with a grey border. */

canvas { border: 1px solid #c3c3c3; }

HTML 文件

此 HTML 文件创建一个 canvas 元素并使用外部 JavaScript 和 CSS 文件。

相关主题

html中渐变怎么写,如何创建渐变 (HTML)相关推荐

  1. html中渐变怎么写,css颜色渐变怎么写?

    CSS3的语法是建立在CSS原先版本基础上的,它允许使用者在标签中指定特定的HTML元素而不必使用多余的class.ID或JavaScript. css颜色渐变可以使用css3的渐变(gradient ...

  2. html渐变线条代码,css3线性渐变语法的详解(代码示例)

    本篇文章给大家带来的内容是css3线性渐变语法的详解(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 线性渐变的完整语法:.demo { background: line ...

  3. java 绘图 渐变_如何在Java 2D中创建渐变绘画?

    要更改图形形状的颜色,我们可以使用setPaint()方法.对于简单的着色,我们可以将颜色对象传递给此方法,例如Color.RED或Color.GREEN. 如果要使用渐变绘画进行绘画,则可以使用Gr ...

  4. AI教程 如何在 Illustrator 中创建渐变颜色?

    欢迎观看Illustrator教程,小编带大家学习 Illustrator 的基本工具和使用技巧,了解如何在 Illustrator 中使用不同类型的渐变,以及对图稿应用线性和放射性渐变. 在 Ill ...

  5. 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.7节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  6. html设置%3cbody%3e背景颜色,使用css写带纹理渐变背景图的示例代码

    项目中页面长度大概在2000px以上,再加上背景图是带纹理和渐变的,所以加载起来会很大很耗费时间,所以就改用css实现了. 这个网站中有很多现成的背景,也可以自定义背景色,纹样的颜色和透明度. 网站中 ...

  7. 沿环形路径创建渐变画笔

    沿环形路径创建渐变画笔 <Windowx:Class="WpfApp5.MainWindow"xmlns="http://schemas.microsoft.com ...

  8. ansys的kbc_在Ansys中施加阶跃载荷和渐变载荷的方法 | 坐倚北风

    1.阶跃载荷和渐变载荷的区别 在工程中施加载荷的方式有两种基本方式:阶跃载荷和渐变载荷.前一种方式载荷被突然施加到对象上:而后一种方式,载荷被缓缓地施加到对象上. 在Ansys中,虽然在载荷步的时间终 ...

  9. CorelDRAW中如何设置调和对象颜色渐变

    通过调整调和对象属性,可以更改调和效果的外观.调和对象属性包括调和对象之间的数量和间距.调和对象颜色渐变.调和映射到的节点.调和的路径以及起始对象和结束对象.本教程将详解CorelDRAW中如何设置调 ...

最新文章

  1. c# dbgrid数据导出到xlsx和ini中实例
  2. 企业实战之分布式锁方案一步步的演变历程!,Java数据库索引面试题
  3. 2017 数据驱动大会赠票赠书名单出啦!
  4. CentOS 7/8 安装 oniguruma 和 oniguruma-devel
  5. 剑网三缘起,葱姜蒜也能卖?欺负新玩家被批评,但说明游戏很自由
  6. 【leetcode】股票买卖系列总结
  7. java进程优先级,跨平台方式改变java进程优先级
  8. 解决 WPF 绑定集合后数据变动界面却不更新的问题(使用 ObservableCollection)
  9. python统计段落单词词频_使用Python统计文件中词频,并且生成词云
  10. 非大学生学计算机,浅谈非计算机专业大学生的计算机教学
  11. 动画学信奥 漫画学算法 CSP-J入门级 (二)、C++程序设计 数据结构(依据「NOI大纲」)
  12. windows--bat--右键菜单
  13. FTP Client Setup
  14. linux低级格式化工具下载,硬盘低格工具(Hard Disk Low Level Format Tool)
  15. 【畅捷通T+Cloud】12.3版本上线啦!
  16. 全国IT标准化技术委员会教育技术分会CETSC介绍 (公号回复“CETSC”下载PDF资料,欢迎转发、赞赏支持)
  17. 第11篇 zephyr 数据传递之LIFO
  18. 使用docker 搭建 ceph 开发环境,使用aws sdk 存储数据
  19. 网络协议基础05--数据链路层
  20. 浙江大学远程教育计算机应用基础第4次,浙江大学远程教育计算机应用基础2013年秋-4.Excel知识题...

热门文章

  1. 知道如何翻译英语语音吗?
  2. 想跳槽却简历石沉大海?一起来围观月薪20k的软件测试工程师真实简历 (含金量高面试题)
  3. 使用Qt打造属于自己的串口调试助手
  4. Python基础入门(2):简单函数(input,eval,print)与循环结构
  5. 从零开始学习Python在e站上下载蕾姆的本子
  6. css 遥控器界面,智能电视用户体验设计之遥控器篇
  7. 让在线二维码惊艳的9大绝招!
  8. 2022-2028年中国N-乙基-2-吡咯烷酮行业市场运行格局及战略咨询研究报告
  9. 《惢客创业日记》2018.10.12(周五) 声音主播背后的“天龙八步”(一)
  10. 李永乐复习全书概率论与数理统计 第三章 多维随机变量及其分布