Skip to content

Image 图片

图片组件,用于图片展示和预览。

基础用法

html
<div id="demo-image"></div>

<script>
  const image = new SaImage('#demo-image', {
    src: '../../sanoui-portal/images/placeholder-200.svg',
    alt: '示例图片',
    fit: 'cover'
  });
</script>
加载 SanoUI 组件中...
            
          

不同适应方式

通过 fit 配置图片的适应方式。

html
<div id="demo-image-fit"></div>

<script>
  // fill - 填充
  new SaImage('#demo-image-fit', {
    src: '../../sanoui-portal/images/placeholder-150.svg',
    fit: 'fill'
  });
  
  // contain - 包含
  new SaImage('#demo-image-fit', {
    src: '../../sanoui-portal/images/placeholder-150.svg',
    fit: 'contain'
  });
  
  // cover - 覆盖
  new SaImage('#demo-image-fit', {
    src: '../../sanoui-portal/images/placeholder-150.svg',
    fit: 'cover'
  });
  
  // none - 不缩放
  new SaImage('#demo-image-fit', {
    src: '../../sanoui-portal/images/placeholder-150.svg',
    fit: 'none'
  });
  
  // scale-down - 缩小适应
  new SaImage('#demo-image-fit', {
    src: '../../sanoui-portal/images/placeholder-150.svg',
    fit: 'scale-down'
  });
</script>
加载 SanoUI 组件中...
            
          

图片预览

通过 preview: true 启用图片预览功能。

html
<div id="demo-image-preview"></div>

<script>
  const image = new SaImage('#demo-image-preview', {
    src: '../../sanoui-portal/images/placeholder-200.svg',
    alt: '可预览图片',
    fit: 'cover',
    preview: true
  });
</script>
加载 SanoUI 组件中...
            
          

API

构造函数参数

参数说明类型默认值
container容器选择器或元素string | HTMLElement-
options配置选项SaImageOptions{}

配置选项

参数说明类型可选值默认值
src图片地址string--
alt图片描述string-''
fit适应方式stringfill / contain / cover / none / scale-downfill
preview是否可预览boolean-false
lazy是否懒加载boolean-false

方法

方法名说明参数返回值
setSrc设置图片地址src: stringvoid
preview预览图片-void
destroy销毁实例-void

示例代码

手动创建实例

javascript
const image = new SaImage('#my-image', {
  src: 'https://example.com/image.jpg',
  alt: '示例图片',
  fit: 'cover',
  preview: true,
  lazy: true
});

// 更新图片
image.setSrc('https://example.com/new-image.jpg');

// 预览图片
image.preview();

懒加载

javascript
const image = new SaImage('#my-image', {
  src: 'https://example.com/image.jpg',
  lazy: true // 启用懒加载
});

实际使用场景

场景 1:图片列表展示

在列表中展示多张图片,支持预览。

html
<div id="image-list" style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;"></div>

<script>
  const images = [
    '../../sanoui-portal/images/placeholder-200.svg',
    '../../sanoui-portal/images/placeholder-200.svg',
    '../../sanoui-portal/images/placeholder-200.svg'
  ];
  
  images.forEach((src, index) => {
    const container = document.createElement('div');
    container.style.width = '100%';
    container.style.aspectRatio = '1';
    container.style.overflow = 'hidden';
    container.style.borderRadius = '4px';
    document.getElementById('image-list').appendChild(container);
    
    new SaImage(container, {
      src: src,
      alt: `图片 ${index + 1}`,
      fit: 'cover',
      preview: true
    });
  });
</script>
加载 SanoUI 组件中...
            
          

场景 2:头像展示

使用 Image 组件展示用户头像。

html
<div id="avatar-container" style="display: flex; gap: 1rem; align-items: center;"></div>

<script>
  const users = [
    { name: '用户一', avatar: '../../sanoui-portal/images/placeholder-60.svg' },
    { name: '用户二', avatar: '../../sanoui-portal/images/placeholder-60.svg' },
    { name: '用户三', avatar: '../../sanoui-portal/images/placeholder-60.svg' }
  ];
  
  users.forEach(user => {
    const userContainer = document.createElement('div');
    userContainer.style.display = 'flex';
    userContainer.style.alignItems = 'center';
    userContainer.style.gap = '0.5rem';
    document.getElementById('avatar-container').appendChild(userContainer);
    
    const avatarContainer = document.createElement('div');
    avatarContainer.style.width = '60px';
    avatarContainer.style.height = '60px';
    avatarContainer.style.borderRadius = '50%';
    avatarContainer.style.overflow = 'hidden';
    userContainer.appendChild(avatarContainer);
    
    new SaImage(avatarContainer, {
      src: user.avatar,
      alt: user.name,
      fit: 'cover'
    });
    
    const nameDiv = document.createElement('div');
    nameDiv.textContent = user.name;
    userContainer.appendChild(nameDiv);
  });
</script>
加载 SanoUI 组件中...
            
          

Released under the MIT License.