【前端】Vue2全家桶案例《看漫画》之六、图片阅读页
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_6.html
项目github地址:https://github.com/shamoyuu/vue-vux-iconan
这个页面基本上的业务功能的堆积,没必要把代码一一进行讲解,亲们可以看我提交的历史,非常简单易懂。
下面说一下其中比较重要或者难懂的地方。
一、创建插件
src/plugins/Popup.js文件
import PopupComponent from "@/components/common/Popup"
let $vm;
export default {
install(Vue, options) {
Vue.mixin({
created() {
this.$popup = {
show() {
if (!$vm) {
const Popup = Vue.extend(PopupComponent);
$vm = new Popup({
el: document.createElement('div')
});
document.body.appendChild($vm.$el);
}
$vm.show = true;
},
hide() {
$vm.show = false;
}
};
}
});
}
}
这个文件创建了一个全局的对话框插件,其中Vue.mixin是“全局注册一个混合,影响注册之后所有创建的每个 Vue 实例。插件作者可以使用混合,向组件注入自定义的行为。”
这样我们就创建了一个全局插件,可以在任何地方使用它(例如Vux的ToastPlugins就是这样一个全局插件)。
使用方法:
this.$popup.show();
二、图片清晰度
我们在点击图片阅读页的菜单时,会弹出清晰度选择框

不同的清晰度所获取到的图片是不同的,原画就是100%质量,图片的清晰度就是上传时的清晰度,一般每张500kb,而最下面的超级省流量大概每张20kb。
这是怎么实现的呢?
当然不是把每张图片的每种清晰度都存储一遍!而是后台根据图片url的后缀实时处理返回。
在Picture.vue文件中,当前展示的图片是由两部分组成的
that.currentPictureUrl =
that.pictures[that.currentPictureIndex].url +
that.currentDefinition;
第一部分的图片的url,第二部分是图片的清晰度。url没啥好说,就是图片的url,清晰度是下面这样定义的
"" : "原画",
"@!z1": "超清",
"@!z2": "高清",
"@!z3": "标清",
"@!z4": "低清",
"@!z5": "超级省流量"
这样我们的一张图片url拼接出来就是下面这样的
http://iconan.bj.bcebos.com/1/78/1516537741877.jpg@!z3
你可以直接修改最后的z3为z1-z5任意值,不写就是默认的原画。
通过不同的后缀,就可以获取到不同的图片了。
但是这个处理图片的功能不是我写的,是百度的对象存储BOS自带的(前面的番外篇一中提到了)。

我这里写了z1-z5,可以看到z1-z3只是限定了图片质量,z4和z5还限定了图片尺寸,所以可以更小。
所以你要写个z6会报错。
不过你需要这些处理图片的功能的话,你的资源只能存储在百度BOS里。
三、提前加载下一张图片
这个很简单,但是有一些人还不知道,就顺便提一下。
在Picture.vue中,我们点击下一页,或者切换清晰度后,会自动加载下一页的图,以使用户的阅读更加平滑,不至于点击后才开始加载(虽然有点小小浪费流量的嫌疑)。
loadNext: function() {
let that = this;
//加载下一页
if (that.currentPictureIndex < that.maxPictureIndex - 1) {
var imgObj = new Image();
imgObj.src =
that.pictures[that.currentPictureIndex + 1].url +
that.currentDefinition;
}
}
核心代码就是两句
var imgObj = new Image();
imgObj.src = url;
这个时候浏览器会自动去加载这个url中的图片缓存起来,以备不时之需。
【前端】Vue2全家桶案例《看漫画》之六、图片阅读页的更多相关文章
- 【前端】Vue2全家桶案例《看漫画》之一、添加四个导航页
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_1.html 项目github地址:https://github.com/shamoyuu/ ...
- 【前端】Vue2全家桶案例《看漫画》之番外篇、express上传漫画(可选)
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_extra_1.html 项目github地址:https://github.com/sha ...
- 【前端】Vue2全家桶案例《看漫画》之四、漫画页
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_4.html 项目github地址:https://github.com/shamoyuu/ ...
- 【前端】Vue2全家桶案例《看漫画》之二、完成首页基本样式
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_2.html 项目github地址:https://github.com/shamoyuu/ ...
- 【前端】Vue2全家桶案例《看漫画》之七、webpack插件开发——自动替换服务器API-URL
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_7.html 项目github地址:https://github.com/shamoyuu/ ...
- 【前端】Vue2全家桶案例《看漫画》之五、引入axios
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_5.html 项目github地址:https://github.com/shamoyuu/ ...
- 【前端】Vue2全家桶案例《看漫画》之三、引入vuex
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_3.html 项目github地址:https://github.com/shamoyuu/ ...
- Vue2全家桶+Element搭建的PC端在线音乐网站
目录 1,前言 2,已有功能 3,使用 4,目录结构 5,页面效果 登录页 首页 排行榜 歌单列表 歌单详情 歌手列表 歌手详情 MV列表 MV详情 搜索页 播放器 1,前言 项目基于Vue2全家桶及 ...
- Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
本文转载于:https://www.jianshu.com/p/32beaca25c0d 都说Vue2简单上手容易,的确,看了官方文档确实觉得上手很快,除了ES6语法和webpack的配置让你感到 ...
随机推荐
- 小项目:聊天室 (jQuery,PHP,MySQL)
这几天写了一个小项目,初衷是自己写一个有前端,有后端的东西练练手,所以,实际意义并不大,只是拿来试试手而已. 我对这个聊天室的构想是这样的:先建两个数据库,一个保存用户名和密码,另一个保存用户名和发送 ...
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
- Spring事务不回滚原因分析
Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...
- Android Training Note
版本适配 Tip:为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的AP ...
- 如何设置select和option的文字居中?
今天在设置option文字居中时发现,给select设置text-align:center在火狐浏览器下ok,但是在chrome浏览器无效,然后option在两个浏览器下设置text-align:ce ...
- apache 限制IP访问
<Directory "/var/www"> Options All AllowOverride None Order Deny,Allow Deny From all ...
- CF698C. LRU [容斥原理 概率]
CF698C. LRU 题意:n种物品,大小为k的队列,\(p_i\)的概率选择第i种物品放入队尾,如果已经有i了就不放了.队列大小>k时弹出队首.求\(10^{100}\)次操作后每种物品在队 ...
- Apache Hadoop配置Kerberos指南
通常,一个Hadoop集群的安全使用kerberos来进行保障.在启用Kerberos后,需要用户进行身份验证.用户通过验证后可以使用GRANT/REVOKE语句来进行基于角色的访问控制.本文介绍一下 ...
- 撸一撸Spring Cloud Ribbon的原理
说起负载均衡一般都会想到服务端的负载均衡,常用产品包括LBS硬件或云服务.Nginx等,都是耳熟能详的产品. 而Spring Cloud提供了让服务调用端具备负载均衡能力的Ribbon,通过和Eure ...
- SaltStack 与 Python 程序的结合
SaltStack 库中的 Modules: 在 SaltStack 中,每个子系统插件(plug-in)都是一个 Python Module.因此,SaltStack 库中的 Module 可以看作 ...