今天我们分享基于uniapp + vue实现仿微信相册实例,该插件完全还原了微信相册的功能

1: 相册选择

2: 图片,视频类型过滤

3: 自定义相册界面UI


技术实现

  • 开发环境:HbuilderX + nodejs
  • 技术框架:uniapp + vue2.x
  • 测试环境:App端(Android + IOS)
  • 代码:开源

效果概览


界面布局

这里仿微信相册界面主要还是样式为主,功能上使用了“智密相册-自定义原生相册”插件,使用插件实现相册的相关功能,然后我们自己实现仿微信相册界面。这里布局代码主要如下

<view class="album-container" :style="{ paddingTop: statusBarHeight + 'px' }"><!-- 顶部栏,用于显示按钮和下一步 --><view class="album-title-bar"><view class="album-title-bar__left" @click="doClear"><image class="album-close-btn" src="../../static/icon_close.png" mode="widthFix"></image></view><view class="album-title-bar__center" @click="showAlbumSelect = !showAlbumSelect"><view class="album-title-bar__center-album-btn"><text class="album-title-bar__center-name">{{ albumName || '所有照片' }}</text><view class="album-title-bar__center-arrow"><image class="album-title-bar__center-arrow-inner" src="../../static/icon_arrow_down.png" mode="widthFix"></image></view></view></view><view class="album-title-bar__right" @click="doFinish"><text class="album-title-bar__right-btn">下一步{{selectedCount ? `(${selectedCount})` : ''}}</text></view></view><!-- 插件自带的原生控件 --><zhimi_album_view ref='albumView' class="album-elem" :class="{ 'show-album-ctx': !showAlbumSelect }"></zhimi_album_view></view>

这里有个重点,由于我们去掉了原生的标题栏,这需要在pages.json中进行配置,具体配置如下

{"path": "pages/index/wxAlbum","style": {"navigationStyle":"custom"}
},

相册控件初始化

在这里我们主要是操作原生控件“zhimi_album_view”提供的方法,首先我们需要执行控件方法设置相册类型,回调事件,以及获取相册列表,具体如下

  • 设置回调事件
let albumView = this.$refs.albumView
albumView.setEventCallback(({ type, data }) => {console.log(type, data)
})
  • 设置相册类型
let albumView = this.$refs.albumView
albumView.albumType(0); // 0 全部, 1 照片, 2 视频
  • 获取系统相册列表
let albumView = this.$refs.albumView
albumView.getAlbumTypeNames(albums => {// albums = [{ albumId, name, total }]console.log(albums)
})
  • 加载相册文件
let albumView = this.$refs.albumView
albumView.loadAlbum('') // 这里空就是全部文件,如果传了albumId就是对应相册的文件

具体的流程就是设置回调事件,然后设置相册类型,获取相册列表,获取文件连接,合起来的代码就是这样的

let albumView = this.$refs.albumView
albumView.setEventCallback(({ type, data }) => {console.log(type, data)
})
albumView.albumType(0); // 0 全部, 1 照片, 2 视频
albumView.getAlbumTypeNames(albums => {this.albums = albums
})
albumView.loadAlbum('')

选择切换相册

在微信里面我们可以切换相册,在这里控件提供了获取相册和加载相册的功能,因此我们也可以实现切换相册的功能,对应的ui我们简单的实现一个切换列表

<scroll-view class="album-select-container" :class="{ 'show-album-ctx': showAlbumSelect }" scroll-y><list><cell @click="loadAlbum('')"><text class="album-select-item">所有图片</text></cell><cell v-for="(item, index) in albums" :key="item.albumId" @click="loadAlbum(item)"><text class="album-select-item">{{item.name}}({{item.total}}张)</text></cell></list>
</scroll-view>
.album-select-container { height: 0;width: 750rpx;background-color: #FFF; }
.album-select-item { height: 60px;line-height: 60px;font-size: 14px;padding: 0 15px;border-bottom-width: 1px;border-bottom-color: #f2f2f2; }
.show-album-ctx { flex: 1; }

做出来的效果大概就是这样的


监听选择,编辑等事件

做相册做重要的是监听事件,监听事件有利于做一些增强交互,比如已选多少,编辑文件等

// 相册事件回调AlbumCallbackHanlder (res) {let { type, data } = resswitch (type) {// 未获取相册权限case 'noAuthority':uni.showModal({ content: `未获取相册权限` })break;// 图片/视频选择变化case 'onCheckedChanged':this.selectedCount = res.selectNumbreak// 点击编辑图片/视频case 'onClickEditImage':console.log(res);break;default:console.log(res)break;}},

完成选择

一般来说这类都是以一个弹出层选择完文件之后返回业务流程的,这里抛开业务流程交互,只着重考虑选择部分的。

当选择完成之后,开发者需要自己调用控件提供的Api获取到文件的列表,具体的代码如下

// 获取相册控件对象
let albumView = this.$refs.albumView
// 获取选择数据
albumView.getCheckedImagePaths(filePaths => {// 注意:此处返回的filePaths为平台路径,前端显示请加file://前缀console.log(filePaths)
})

注意看注释,这里最大的重点是路径,如果说获取到的路径前端需要显示在界面前面,需要添加file://前缀,比如获取到的文件路径如下:

/var/data/Android/Album/timeStamp.png

前端显示的时候需要这样写

<image src="file:///var/data/Android/Album/timeStamp.png"/>

注意这里是3个斜杆,因为安卓这类移动端系统都是基于类unix开发的,因此都是从 / 根开始检索文件的,所以前端需要使用file协议,并且以/开头。


ok,到这里uniapp实现仿微信相册的部分就分享完成啦,大家可以根据自己的爱好定制,改为仿得物,仿qq相册都可以呀,界面显示形式不唯一嘛。

对于这部分的代码使用到的原生插件,可以参考uniapp插件市场中的插件智密相册-自定义原生相册+图片视频过滤https://ext.dcloud.net.cn/plugin?id=5846

uniapp框架如何实现仿微信相册 | 图视频过滤、相册选择功能相关推荐

  1. uniapp框架如何实现仿微信相册插件 | 图视频编辑 + 压缩

    在上上篇文章中(),我们基于uniapp框架实现了仿微信相册中的拍照+录像功能.今天,就继续在uni-app中实现: 1: 图片编辑 2: 视频编辑 3: 文件压缩 技术实现 开发环境:Hbuilde ...

  2. Android显示九宫图(自定义圆角,仿微信九宫格图)

    详细解析Android显示九宫图(自定义圆角,仿微信九宫格图) 这是一个自定义九宫格图片框架,里面有设置圆角大小,还有当图片一张的时候控件自定义的大小,图片的间隔,四张图片的时候图片自定义为两行两列等 ...

  3. Android 仿微信录制短视频(不使用 FFmpeg)

    转载请标明出处与作者:https://blog.csdn.net/u011133887/article/details/83654724 项目中原本就有录制短视频的功能,使用的是 # qdrzwd/V ...

  4. android bmob 朋友圈,仿微信朋友圈视频效果 – MVideo

    MVideo 仿微信朋友圈视频效果,可以拖拽及缩放,视频查看,基于ijkplayer. Demo 入门 Step 1:在buil文件中添加JitPack仓库: allprojects { reposi ...

  5. Android仿微信录制短视频

    WxRecoderVideo 简介 基于VCamera,Android仿微信录制短视频,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. 使用 ...

  6. android高仿微信小视频,Android仿微信录制小视频

    本文实例为大家分享了Android仿微信录制小视频的具体代码,供大家参考,具体内容如下 先上张图片看看效果 简单叙述下 首先通过Camera类调用系统相机 通过surfaceview绘制出来 通过Me ...

  7. Android之---高仿微信录制小视频(拍摄和查看)

    高仿微信录制小视频(拍摄和查看) Android仿微信小视频录制功能 http://blog.csdn.net/u012227600/article/details/50835633 Android仿 ...

  8. 基于VCamera,仿微信录制短视频

    基于VCamera,Android仿微信录制短视频,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. recoder4.gif 使用 1) 在b ...

  9. uniapp 即时通讯_uni-App 仿微信 App 即时通讯|vue+uniapp 聊天

    项目介绍 基于uni-app+vue+vuex+uniPop+swiper等技术开发仿微信App聊天室实战项目,实现了发送消息.表情(gif动图),图片预览.地图位置.红包.仿微信朋友圈等功能. 项目 ...

最新文章

  1. mac 使用homebrew 安装mysql
  2. SAP WM中阶下架策略A(Partial Pallet Quantity)
  3. Xtragrd 取消当前行
  4. 在python中模块可以封装_python 制作python包,封装成可用模块教程
  5. mysql insert 错误码_利用 MySQL 自身错误诊断区域-爱可生
  6. Redis:分布式锁Watch
  7. python项目结构图_python项目
  8. 魅族回应 “暗中给手机植入木马”;前谷歌AI伦理专家遭解雇或因论文;GoLand 2020.3发布|极客头条...
  9. python描述符 descriptor
  10. c python函数图像_python画正余弦函数图像?
  11. laypage分页java例子_layPage分页示例
  12. CDRX -- LTE连接态下的DRX
  13. RTL8372-CG/RTL8373-CG
  14. Python | P站壁纸爬取
  15. 创建题库后Excel导入试题老是失败?人工导题服务上线啦~
  16. 十大高颜值蓝牙耳机排行榜,最受欢迎的真无线蓝牙耳机前十名
  17. 页面布局常用,让子级div排排坐
  18. 火车头+php教程,dede使用火车头采集视频教程
  19. 文献导读 - Machine Learning Identifies Stemness Features Associated with Oncogenic Dedifferentiation...
  20. Spring Cloud整合Websocket(SockJs Stomp方式)

热门文章

  1. 运筹学基础【三】 之 决策
  2. WebGIS学习资源推荐(包含学习路线、软件和数据资源推荐)
  3. AlphaSSL证书和GlobalSign SSL证书介绍
  4. c++面试常见题·Part 1 基础
  5. SSSP整合分页CRUD
  6. uniapp app微信授权登录
  7. 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点
  8. Linux驱动开发(二)内核符号表
  9. Elasticsearch6.4专题之16:Ingest Node
  10. Java 在Windows上通过代码开启和关闭exe程序