Skip to content

高级使用

本指南涵盖 ImagesViewer 的高级功能和配置,包括自定义选项、性能优化和与框架集成。

自定义主题

您可以使用 theme 配置完全自定义 ImagesViewer 的外观:

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg'],
  theme: {
    // 背景
    viewerBgColor: 'rgba(0, 0, 0, 0.9)',
    
    // 工具栏
    toolbarBgColor: 'rgba(30, 30, 30, 0.8)',
    toolbarBorderRadius: '8px',
    toolbarPadding: '10px 15px',
    
    // 按钮
    buttonBgColor: 'rgba(50, 50, 50, 0.7)',
    buttonHoverBg: 'rgba(80, 80, 80, 0.7)',
    buttonSize: '45px',
    
    // 导航按钮
    navButtonBgColor: 'rgba(50, 50, 50, 0.7)',
    navButtonSize: '55px',
    
    // 信息面板
    infoBgColor: 'rgba(30, 30, 30, 0.8)',
    infoBorderRadius: '8px',
    
    // 缩略图
    thumbItemWidth: '80px',
    thumbItemHeight: '50px',
    thumbGap: '12px',
    
    // 颜色
    textColor: 'rgba(255, 255, 255, 0.9)',
    activeColor: 'rgba(100, 150, 255, 0.8)',
    
    // 动画
    transitionSpeed: '0.3s'
  }
});

国际化

ImagesViewer 通过 i18n 配置支持国际化:

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg'],
  i18n: {
    info: {
      name: '名称:',
      dimensions: '尺寸:',
      shortcuts: '快捷键',
      zoomIn: '放大:',
      zoomOut: '缩小:',
      prev: '上一张:',
      next: '下一张:',
      reset: '重置:',
      fullscreen: '全屏:',
      info: '信息:',
      close: '关闭:'
    },
    buttons: {
      prev: '上一张 (←)',
      next: '下一张 (→)',
      close: '关闭 (Esc)'
    }
  }
});

缓存管理

通过缓存管理优化性能:

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg', 'image5.jpg'],
  maxCacheSize: 20, // 缓存中最多 20 张图片
  preloadCount: 5, // 预加载 5 张相邻图片
});

自定义按钮

向工具栏添加自定义按钮:

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg'],
  customButtons: [
    [
      '🔍',
      () => {
        console.log('自定义搜索按钮点击');
        // 自定义功能
      }
    ],
    [
      '📌',
      () => {
        console.log('自定义固定按钮点击');
        // 自定义功能
      }
    ]
  ]
});

编程控制

对查看器的完全编程控制:

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg', 'image3.jpg'],
  onShow: function(container) {
    // 访问 DOM 元素
    const toolbar = container.querySelector('.images-viewer-toolbar');
    
    // 添加自定义元素
    const customElement = document.createElement('div');
    customElement.textContent = '自定义内容';
    customElement.style.cssText = 'color: white; margin: 10px;';
    container.appendChild(customElement);
  }
});

// 稍后在代码中
setTimeout(() => {
  viewer.next(); // 前往下一张图片
}, 3000);

setTimeout(() => {
  viewer.close(); // 关闭查看器
}, 10000);

与框架集成

Vue.js

vue
<template>
  <div>
    <button @click="openViewer">查看图片</button>
  </div>
</template>

<script>
import ImagesViewer from 'images-viewer-js';

export default {
  methods: {
    openViewer() {
      new ImagesViewer({
        images: ['image1.jpg', 'image2.jpg'],
        closeOnMaskClick: true
      });
    }
  }
};
</script>

React

jsx
import React from 'react';
import ImagesViewer from 'images-viewer-js';

function ImageGallery() {
  const openViewer = () => {
    new ImagesViewer({
      images: ['image1.jpg', 'image2.jpg'],
      closeOnMaskClick: true
    });
  };

  return (
    <button onClick={openViewer}>查看图片</button>
  );
}

export default ImageGallery;

Angular

typescript
import { Component } from '@angular/core';
import ImagesViewer from 'images-viewer-js';

@Component({
  selector: 'app-image-viewer',
  template: '<button (click)="openViewer()">查看图片</button>'
})
export class ImageViewerComponent {
  openViewer() {
    new ImagesViewer({
      images: ['image1.jpg', 'image2.jpg'],
      closeOnMaskClick: true
    });
  }
}

性能优化

懒加载

ImagesViewer 自动为图片实现懒加载,但您可以进一步优化:

javascript
const viewer = new ImagesViewer({
  images: largeImageArray,
  preloadCount: 3, // 只预加载 3 张相邻图片
  maxCacheSize: 10, // 限制缓存大小
});

缩略图优化

自定义缩略图设置以获得更好的性能:

javascript
const viewer = new ImagesViewer({
  images: imageArray,
  theme: {
    thumbItemWidth: '60px', // 更小的缩略图
    thumbItemHeight: '40px',
    thumbMaxWidth: '60%' // 限制缩略图容器宽度
  }
});

高级事件处理

javascript
const viewer = new ImagesViewer({
  images: ['image1.jpg', 'image2.jpg'],
  onShow: function(container) {
    console.log('查看器打开');
    // 添加自定义事件监听器
    container.addEventListener('click', (e) => {
      if (e.target.classList.contains('custom-element')) {
        // 处理自定义元素点击
      }
    });
  },
  onClose: function() {
    console.log('查看器关闭');
    // 清理资源
  },
  onChange: function(data) {
    console.log(`切换到图片 ${data.index}`);
    // 跟踪图片视图
  }
});

安全考虑

图片源安全

从外部源加载图片时,确保它们来自受信任的域,以防止安全问题。

CSP 合规性

如果您的站点使用内容安全策略 (CSP),您可能需要添加适当的指令:

html
<meta http-equiv="Content-Security-Policy" content="img-src 'self' https: data:">

使用 MIT 许可证发布。