更新记录

1.0.0(2025-10-24)

1.0.0 (2025-10-24)


平台兼容性

uni-app(3.6.12)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Chrome插件版本 Safari Safari插件版本 app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 5.0 1.0.0 12 1.0.0 1.0.0
微信小程序 微信小程序插件版本 支付宝小程序 支付宝小程序插件版本 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
1.0.0 1.0.0 - - - - - - - - - -

uni-app x(3.6.12)

Chrome Chrome插件版本 Safari Safari插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序 微信小程序插件版本
1.0.0 1.0.0 5.0 1.0.0 12 1.0.0 1.0.0 1.0.0

其他

多语言 暗黑模式 宽屏模式

hy-manga-flow

漫画阅读器组件,支持左右分页滑动、双指/双击缩放、图片预加载等功能

功能特性

核心功能

  • 📖 左右滑动翻页 - 流畅的分页阅读体验
  • 🔍 双指缩放 - 支持双指手势缩放查看细节
  • 👆 双击缩放 - 双击快速放大/缩小
  • 🎯 智能交互 - 缩放时自动禁用翻页,保证交互不冲突
  • 🖼️ 图片拖动 - 放大后可拖动查看不同区域
  • 📊 页码指示器 - 实时显示当前阅读进度
  • ⚡ 图片预加载 - 智能预加载相邻页面
  • 🔄 加载状态 - 优雅的加载动画和错误处理
  • 🛠️ 工具栏 - 可选的快捷操作工具栏

安装方式

方式一:通过uni_modules导入(推荐)

DCloud插件市场 搜索 hy-manga-flow 直接导入到项目中

方式二:手动导入

  1. 下载组件源码
  2. 复制 hy-manga-flow 文件夹到项目的 uni_modules 目录下

基础用法

快速开始

<template>
  <view class="container">
    <hy-manga-flow 
      :images="imageList"
      :current="currentPage"
      @change="onPageChange"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 0,
      imageList: [
        'https://example.com/manga/page1.jpg',
        'https://example.com/manga/page2.jpg',
        'https://example.com/manga/page3.jpg',
        // ...更多图片
      ]
    }
  },
  methods: {
    onPageChange(e) {
      console.log('当前页码:', e.current)
      this.currentPage = e.current
    }
  }
}
</script>

<style>
.container {
  width: 100vw;
  height: 100vh;
}
</style>

API 文档

Props

参数 类型 默认值 说明
images Array [] 图片地址数组
current Number 0 当前页码(从0开始)
showIndicator Boolean true 是否显示页码指示器
showToolbar Boolean false 是否显示工具栏
minScale Number 1 最小缩放比例
maxScale Number 4 最大缩放比例
doubleTapScale Number 2 双击缩放比例
imageMode String 'widthFix' 图片模式(同image组件mode)
loadingText String '加载中...' 加载提示文本
errorText String '加载失败' 加载失败提示文本
indicatorBottom String '40rpx' 指示器距离底部距离
toolbarBottom String '100rpx' 工具栏距离底部距离

Events

事件名 说明 回调参数
change 页面切换时触发 { current: Number, source: String }
scale 缩放时触发 { index: Number, scale: Number }
load 图片加载完成 { index: Number, width: Number, height: Number }
error 图片加载失败 { index: Number }
transition swiper过渡动画时触发 同swiper组件transition事件
animationfinish swiper动画结束时触发 同swiper组件animationfinish事件

Methods

通过 ref 调用组件方法:

方法名 说明 参数 返回值
goToPage 跳转到指定页 index: Number -
getCurrentPage 获取当前页码 - Number
getImageCount 获取图片总数 - Number

示例:

<template>
  <hy-manga-flow ref="mangaFlow" :images="imageList" />
</template>

<script>
export default {
  methods: {
    jumpToPage() {
      // 跳转到第5页
      this.$refs.mangaFlow.goToPage(4)
    },
    getCurrentInfo() {
      const current = this.$refs.mangaFlow.getCurrentPage()
      const total = this.$refs.mangaFlow.getImageCount()
      console.log(`当前 ${current + 1} / ${total}`)
    }
  }
}
</script>

使用场景

场景一:基础漫画阅读器

<template>
  <hy-manga-flow 
    :images="mangaPages"
    :current="0"
    :show-indicator="true"
    @change="onPageChange"
  />
</template>

<script>
export default {
  data() {
    return {
      mangaPages: [
        'https://cdn.example.com/manga/ch1/p1.jpg',
        'https://cdn.example.com/manga/ch1/p2.jpg',
        'https://cdn.example.com/manga/ch1/p3.jpg',
      ]
    }
  },
  methods: {
    onPageChange(e) {
      // 保存阅读进度
      uni.setStorageSync('readProgress', e.current)

      // 快读完时加载下一章
      if (e.current >= this.mangaPages.length - 2) {
        this.loadNextChapter()
      }
    },
    loadNextChapter() {
      // 加载下一章逻辑
    }
  }
}
</script>

场景二:带工具栏的阅读器

<template>
  <hy-manga-flow 
    :images="imageList"
    :show-toolbar="true"
    :show-indicator="true"
    :max-scale="5"
    @scale="onImageScale"
  />
</template>

<script>
export default {
  methods: {
    onImageScale(e) {
      console.log(`第${e.index + 1}页缩放到 ${e.scale.toFixed(2)}倍`)

      // 记录用户缩放行为
      if (e.scale > 2) {
        console.log('用户正在查看细节')
      }
    }
  }
}
</script>

场景三:自定义样式

<template>
  <hy-manga-flow 
    :images="imageList"
    :show-indicator="true"
    indicator-bottom="100rpx"
    toolbar-bottom="180rpx"
    loading-text="拼命加载中..."
    error-text="图片走丢了"
  />
</template>

场景四:动态加载图片

<template>
  <view>
    <hy-manga-flow 
      ref="reader"
      :images="currentChapterImages"
      :current="currentPage"
      @change="onPageChange"
    />

    <view class="chapter-nav">
      <button @click="prevChapter">上一章</button>
      <button @click="nextChapter">下一章</button>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      currentChapter: 1,
      currentPage: 0,
      chapters: {
        1: ['page1.jpg', 'page2.jpg', 'page3.jpg'],
        2: ['page4.jpg', 'page5.jpg', 'page6.jpg'],
      }
    }
  },
  computed: {
    currentChapterImages() {
      return this.chapters[this.currentChapter] || []
    }
  },
  methods: {
    onPageChange(e) {
      this.currentPage = e.current

      // 自动翻章
      if (e.current === this.currentChapterImages.length - 1) {
        setTimeout(() => {
          this.nextChapter()
        }, 1000)
      }
    },
    prevChapter() {
      if (this.currentChapter > 1) {
        this.currentChapter--
        this.currentPage = 0
      }
    },
    nextChapter() {
      if (this.chapters[this.currentChapter + 1]) {
        this.currentChapter++
        this.currentPage = 0
      }
    }
  }
}
</script>

交互说明

手势操作

  1. 左右滑动 - 切换上一页/下一页
  2. 双指缩放 - 放大/缩小图片查看细节
  3. 双击 - 快速放大到预设倍数,再次双击恢复
  4. 拖动 - 图片放大后可拖动查看不同区域
  5. 单击 - 显示/隐藏工具栏(需开启showToolbar)

交互逻辑

  • 图片缩放比例为 1 时:可以左右滑动翻页
  • 图片缩放比例 > 1 时:禁用翻页,只能拖动查看当前图片
  • 图片缩放接近 1 时:自动重置为 1
  • 切换页面时:自动重置所有缩放状态

性能优化

图片优化建议

  1. 压缩图片 - 建议使用 WebP 格式,压缩率更高
  2. 分辨率控制 - 根据设备宽度提供合适分辨率的图片
  3. CDN加速 - 使用 CDN 服务加速图片加载
  4. 渐进式加载 - 使用渐进式JPEG提升加载体验

性能优化提示

// 推荐:根据屏幕宽度动态拼接图片URL
const systemInfo = uni.getSystemInfoSync()
const screenWidth = systemInfo.screenWidth
const dpr = systemInfo.pixelRatio || 2

// 计算合适的图片宽度
const imageWidth = Math.ceil(screenWidth * dpr)

// 使用图片处理服务(以阿里云OSS为例)
const optimizedUrl = `${originalUrl}?x-oss-process=image/resize,w_${imageWidth}/quality,q_90/format,webp`

常见问题

Q: 图片显示不完整?

A: 请检查 imageMode 属性设置,默认为 widthFix(宽度固定,高度自适应),如需其他模式请参考 image组件文档

Q: 如何实现长按保存图片?

A: 可以在 page-wrapper 上添加 @longpress 事件:

<template>
  <!-- 需要修改组件源码,或者在外层包装一个组件 -->
  <view @longpress="onLongPress">
    <hy-manga-flow :images="imageList" />
  </view>
</template>

<script>
export default {
  methods: {
    onLongPress() {
      uni.showActionSheet({
        itemList: ['保存图片'],
        success: (res) => {
          if (res.tapIndex === 0) {
            this.saveImage()
          }
        }
      })
    },
    saveImage() {
      // 保存图片逻辑
    }
  }
}
</script>

Q: 如何监听用户阅读时长?

A: 可以在页面生命周期中记录:

export default {
  data() {
    return {
      startTime: 0,
      readDuration: 0
    }
  },
  onShow() {
    this.startTime = Date.now()
  },
  onHide() {
    const duration = Date.now() - this.startTime
    this.readDuration += duration
    console.log('本次阅读时长:', duration, '总时长:', this.readDuration)
  }
}

Q: 能否支持竖向滚动?

A: 当前版本专注于横向翻页的漫画阅读场景。如需竖向滚动,建议使用 scroll-view 或其他滚动组件。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: