Skip to content

dom

createWatermark 创建水印

在指定的元素上创建水印。

试一试

签名

createWatermark(el: HTMLElement | HTMLCanvasElement, text: string, options: CreateWatermarkOptions)

参数

  1. el (HTMLElement | HTMLCanvasElement): DOM元素
  2. text (string): 文字内容
  3. options (CreateWatermarkOptions): 选项
ts
interface WatermarkCoreOptions {
  // 文字
  fontFamily?: string
  textColor?: string
  textSize?: number
  fontBold?: boolean
  fontItalic?: boolean
  rotate?: number
  // 背景
  bgColor?: string
  // 其他
  padding?: [number, number]
}

export type CreateWatermarkOptions = WatermarkCoreOptions

返回值

(void)

更多

追加水印的元素分为两种类型:

普通元素

君不见,黄河之水天上来,奔流到海不复回。

君不见,高堂明镜悲白发,朝如青丝暮成雪。

人生得意须尽欢,莫使金樽空对月。

天生我材必有用,千金散尽还复来。

烹羊宰牛且为乐,会须一饮三百杯。

岑夫子,丹丘生,将进酒,杯莫停。

与君歌一曲,请君为我倾耳听。

钟鼓馔玉不足贵,但愿长醉不复醒。

古来圣贤皆寂寞,惟有饮者留其名。

陈王昔时宴平乐,斗酒十千恣欢谑。

主人何为言少钱,径须沽取对君酌。

五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

canvas

下载图片

download 下载文件

通过构造 a 标签来下载文件。

试一试

签名

download(url: string, filename?: string, newWindow?: boolean): void

参数

  1. url (stirng): 下载链接
  2. filename (string): 下载文件名
  3. newWindow (boolean): 是否在新窗口打开

返回值

(void)

注意

要知道,基于 a 标签下载的方案并不好。 a 标签的点击会造成 同步请求,因此,如果下载的链接返回错误,将导致当前页面被替换,这种体验是不好的。

尽管可以通过设置 a 标签的 target 属性为 _blank ,但这又会打开一个新的窗口,并且如果发生错误,页面仍然会替换,对于需要静默下载的场景,这种做法仍然不能解决问题。

downloadSilent 静默下载

静默同步下载(使用iframe)。

试一试

签名

downloadSilent(url: string): void

参数

  1. url (string): 文件URL

返回值

(void)

注意

静默下载解决了使用 a 标签导致当前页刷新或新开页面的情况,但也同时带来一个副作用:

因为静默下载,因此也会引起静默失败,当下载失败时,用户得不到任何错误消息。

downloadBlob 下载Blob

下载Blob。

试一试

签名

downloadBlob(blob: Blob, filename?: string): void

参数

  1. blob (Blob): Blob对象
  2. filename (string): 文件名

返回值

(void)

经典场景复现:异步下载

异步下载大致分为以下步骤:

  1. 使用异步请求获取到一个Blob对象
  2. 将这个Blob对象下载到本地
试一试

优势

异步下载最大的优势就是下载过程可控,诸如加loading这种基于同步下载做不到的事都可以做到了。

劣势

异步下载最大的问题就是跨域。

loadImage 加载图片

加载图片,适用于动态插入图片元素或在canvas上动态绘制图片的场景。

试一试

签名

loadImage(url: string): Promise<HTMLImageElement>

参数

  1. url (string): 图片地址

返回值

(Image): 图片元素对象

setTitle 设置标题

设置浏览器窗口标题。

试一试

签名

setTitle(title: string)

参数

  1. title (string): 标题

返回值

(void)

copyText 复制文本

复制文本到剪切板。

试一试

签名

copyText(text: string): Promise<void>

参数

  1. text (string): 文本内容

返回值

Promise<void>

getCopiedText 获取复制的文本

从剪切板获取复制的文本。

试一试

签名

getCopiedText(): Promise<string>

参数

返回值

(Promise<string>): 文本内容