# @ophiuchus/image

> ### 介绍

Latest version **1.0.2** (published 2021-09-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install @ophiuchus/image
pnpm add @ophiuchus/image
yarn add @ophiuchus/image
bun add @ophiuchus/image
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2021-09-26 |
| First published | 2021-08-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 17 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | songbug1024 |
| Maintainers | songbug1024 |
| Keywords | ui, vue, frontend, component, ophiuchus, vant, vite |

## Links

- npm: https://www.npmjs.com/package/@ophiuchus/image
- Homepage: https://github.com/songbug1024/ophiuchus
- Issues: https://github.com/songbug1024/ophiuchus/issues
- npm.io page: https://npm.io/package/@ophiuchus/image

## Dependencies (1)

- [@ophiuchus/icon](https://npm.io/package/@ophiuchus/icon.md) ^1.0.2

## Alternatives

- [@progress/kendo-ooxml](https://npm.io/package/@progress/kendo-ooxml.md) — 152.1K weekly downloads
- [@progress/kendo-react-ripple](https://npm.io/package/@progress/kendo-react-ripple.md) — 8.0K weekly downloads
- [@progress/kendo-react-orgchart](https://npm.io/package/@progress/kendo-react-orgchart.md) — 4.3K weekly downloads
- [@praxisui/dynamic-fields](https://npm.io/package/@praxisui/dynamic-fields.md) — 2.4K weekly downloads
- [@progress/kendo-vue-listbox](https://npm.io/package/@progress/kendo-vue-listbox.md) — 932 weekly downloads

## Recent versions

- 1.0.2 (latest) — 2021-09-26
- 1.0.1 — 2021-08-30
- 1.0.0 — 2021-08-29

## README

# Image 图片

### 介绍

增强版的 img 标签，提供多种图片填充模式，支持图片懒加载、加载中提示、加载失败提示。

### 引入

```js
import Vue from 'vue';
import Image from '@ophiuchus/image';

Vue.use(Image);
```

## 代码演示

### 基础用法

基础用法与原生 `img` 标签一致，可以设置 `src`、`width`、`height`、`alt` 等原生属性。

```html
<sf-image
  width="100"
  height="100"
  src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg"
/>
```

### 填充模式

通过 `fit` 属性可以设置图片填充模式，可选值见下方表格。

```html
<sf-image
  width="10rem"
  height="10rem"
  fit="contain"
  src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg"
/>
```

### 圆形图片

通过 `round` 属性可以设置图片变圆，注意当图片宽高不相等且 `fit` 为 `contain` 或 `scale-down` 时，将无法填充一个完整的圆形。

```html
<sf-image
  round
  width="10rem"
  height="10rem"
  src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg"
/>
```

### 图片懒加载

设置 `lazy-load` 属性来开启图片懒加载，需要搭配 [Lazyload](#/lazyload) 组件使用。

```html
<sf-image
  width="100"
  height="100"
  lazy-load
  src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg"
/>
```

```js
import Vue from 'vue';
import Lazyload from '@ophiuchus/lazyload';

Vue.use(Lazyload);
```

### 加载中提示

`Image` 组件提供了默认的加载中提示，支持通过 `loading` 插槽自定义内容。

```html
<sf-image src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg">
  <template v-slot:loading>
    <sf-loading type="spinner" size="20" />
  </template>
</sf-image>
```

### 加载失败提示

`Image` 组件提供了默认的加载失败提示，支持通过 `error` 插槽自定义内容。

```html
<sf-image src="https://img3.tuhu.org/oySzSsdrSCR36UGcCtVbsQ_w800_h550.jpeg">
  <template v-slot:error>加载失败</template>
</sf-image>
```

## API

### Props

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| src | 图片链接 | _string_ | - |
| fit | 图片填充模式 | _string_ | `fill` |
| alt | 替代文本 | _string_ | - |
| width | 宽度，默认单位为`px` | _number \| string_ | - |
| height | 高度，默认单位为`px` | _number \| string_ | - |
| radius | 圆角大小，默认单位为`px` | _number \| string_ | `0` |
| round | 是否显示为圆形 | _boolean_ | `false` |
| lazy-load | 是否开启图片懒加载，须配合 [Lazyload](#/lazyload) 组件使用 | _boolean_ | `false` |
| show-error | 是否展示图片加载失败提示 | _boolean_ | `true` |
| show-loading | 是否展示图片加载中提示 | _boolean_ | `true` |
| error-icon | 失败时提示的[图标名称](#/icon)或图片链接 | _string_ | `photo-fail` |
| loading-icon | 加载时提示的[图标名称](#/icon)或图片链接 | _string_ | `photo` |
| icon-prefix | 图标类名前缀，同 Icon 组件的 [class-prefix 属性](#/icon#props) | _string_ | `sf-icon` |

### 图片填充模式 

| 名称       | 含义                                                   |
| ---------- | ------------------------------------------------------ |
| contain    | 保持宽高缩放图片，使图片的长边能完全显示出来           |
| cover      | 保持宽高缩放图片，使图片的短边能完全显示出来，裁剪长边 |
| fill       | 拉伸图片，使图片填满元素                               |
| none       | 保持图片原有尺寸                                       |
| scale-down | 取`none`或`contain`中较小的一个                        |

### Events

| 事件名 | 说明               | 回调参数       |
| ------ | ------------------ | -------------- |
| click  | 点击图片时触发     | _event: Event_ |
| load   | 图片加载完毕时触发 | -              |
| error  | 图片加载失败时触发 | -              |

### Slots

| 名称             | 说明                       |
| ---------------- | -------------------------- |
| default | 自定义图片下方的内容       |
| loading          | 自定义加载中的提示内容     |
| error            | 自定义加载失败时的提示内容 |

### 样式变量

组件提供了下列 Less 变量，可用于自定义样式，使用方法请参考[主题定制](#/theme)。

| 名称                                | 默认值              | 描述 |
| ----------------------------------- | ------------------- | ---- |
| @image-placeholder-text-color       | `@gray-6`           | -    |
| @image-placeholder-font-size        | `@font-size-md`     | -    |
| @image-placeholder-background-color | `@background-color` | -    |
| @image-loading-icon-size            | `32px`              | -    |
| @image-loading-icon-color           | `@gray-4`           | -    |
| @image-error-icon-size              | `32px`              | -    |
| @image-error-icon-color             | `@gray-4`           | -    |

## 常见问题

### 如何引用本地图片？

在 .vue 文件中通过相对路径引用本地图片时，需要在图片的链接外包上一层 `require()`，将图片 URL 转换为 webpack 模块请求，并结合 [file-loader](https://github.com/webpack-contrib/file-loader) 或者 [url-loader](https://github.com/webpack-contrib/url-loader) 进行处理。

```html
<!-- 错误写法 -->
<sf-image src="./image.png" />

<!-- 正确写法 -->
<sf-image :src="__require__('./image.png')" /> // 由于md插件解析的bug，实际使用请把 __require__ 替换成 require。
```

> 对此更详细的解释可以参考 vue-loader 的[处理资源路径](https://vue-loader.vuejs.org/zh/guide/asset-url.html)章节。

### 使用 image 标签无法渲染？

使用 Image 组件时，可能会遇到将 \<image> 作为标签名时无法渲染的问题，比如下面的写法：

```html
<template>
  <image src="xxx" />
</template>

<script>
import { Image } from '@ophiuchus/image';

export default {
  components: {
    Image,
  },
};
<script>
```

这是因为 \<image> 标签是原生的 SVG 标签，Vue 不允许将原生标签名注册为组件名，使用 \<sf-image> 即可规避这个问题。

---
_Source: https://npm.io/package/@ophiuchus/image · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
