功能点

  1. 点击设置字体font-family,设置弹窗出现
  2. 点击弹窗的向下箭头或者选择字体后关闭弹窗
  3. 选择字体后选中的那列显示高亮,并且EbookMenu组件中的设置按钮中的文字也发生变化
  4. 选择字体后电子书的字体随之改变
  5. 在菜单栏和标题栏关闭的时候,设置弹窗也关闭

功能点1实现

创建EbookSettingFontPopup.vue组件,并在EbookMenu.vue组件中引用;
在utils/book.js文件中添加字体数组,然后EbookSettingFontPopup.vue组件引入该数组,通过for循环生成字体列表
book.js

export const FONT_FAMILY = [{ font: 'Default' },{ font: 'Cabin' },{ font: 'Days One' },{ font: 'Montserrat' },{ font: 'Tangerine' }
]

EbookSettingFontPopup.vue组件引入

import { FONT_FAMILY } from '../../utils/book'
export default {data(){return{fontFamily: FONT_FAMILY}}
}

通过vuex创建fontFamilyVisible变量来控制设置窗口;
在EbookSettingFont.vue组件中通过showFontFamilySetting来显示设置窗口;

showFontFamilySetting() {this.setFontFamilyVisible(true)
}

功能点2实现

在EbookSettingFontPopup.vue组件中通过修改fontFamilyVisible的值来实现

hideFontFamilySetting() {this.setFontFamilyVisible(false)},setFontFamily(font) {this.setDefaultFontFamily(font)this.setFontFamilyVisible(false)}

功能点3实现

        <div class="ebook-popup-item" v-for="(item, index) in fontFamily" :key="index"@click="setFontFamily(item.font)"><div class="ebook-popup-item-text" :class="{'selected': isSelected(item)}">{{item.font}}</div><div class="ebook-popup-item-check" v-if="isSelected(item)"><span class="icon-check"></span></div></div>isSelected(item) {return this.defaultFontFamily === item.font},hideFontFamilySetting() {this.setFontFamilyVisible(false)},setFontFamily(font) {this.setDefaultFontFamily(font)this.setFontFamilyVisible(false)}

功能点4实现

在EbookSettingFontPopup.vue组件中通过setFontFamily方法实现,但是只这样的话,是没有效果的,因为电子书是在ifram中的,所以我们要把字体文件插入到ifram中才能有效果

setFontFamily(font) {this.setDefaultFontFamily(font)this.setFontFamilyVisible(false)// 当选择的字体为默认字体的时候,设置为Times New Roman,否则的话设置为选择的字体if(font == 'Default'){this.currentBook.rendition.themes.font('Times New Roman')}else{this.currentBook.rendition.themes.font(font)}}

ifram中注入字体文件
EbookReader.vue组件的initEpub()方法中使用rendition钩子函数

// 表示当阅读器渲染完以后,可以获取资源文件的时候,使用该方法
// contents对象主要用来管理资源
this.rendition.hooks.content.register(contents => {// 添加样式文件,其中传入的值必须为url地址,而不能为路径地址// 所以我们可以把字体文件放到nginx静态资源服务器下,放好之后记得重启ngix和运行npm run sreve// 如果我们想在字体加载完成之后做一些事,我们可以使用Promise对象// 当我们发布到线上以后,本地的http://192.168.0.100:8081/是需要修改,为了使线上和线下使用不同的url,所以这个地址我们需要用到vue-cli3.0的环境变量Promise.all([contents.addStylesheet('http://192.168.0.100:8081/fonts/cabin.css'),contents.addStylesheet('http://192.168.0.100:8081/fonts/daysOne.css'),contents.addStylesheet('http://192.168.0.100:8081/fonts/montserrat.css'),contents.addStylesheet('http://192.168.0.100:8081/fonts/tangerine.css') ]).then(() => {console.log('已经加载完毕,干些什么呢')})})

使用vue-cli3中的环境变量配置url
创建一个与src目录平级的.env.development的环境变量文件;
然后将我们的url抽离出来写成一个变量,注意在vue-cli3.0中创建的变量必须以VUE_APP开头,否则就没有办法找到这个变量
.env.development文件

VUE_APP_RES_URL = http://192.168.0.100:8081

使用该变量

this.rendition.hooks.content.register(contents => {// 添加样式文件,其中传入的值必须为url地址,而不能为路径地址// 所以我们可以把字体文件放到nginx静态资源服务器下,放好之后记得重启ngix和运行npm run sreve// 如果我们想在字体加载完成之后做一些事,我们可以使用Promise对象// 当我们发布到线上以后,本地的http://192.168.0.100:8081/是需要修改,为了使线上和线下使用不同的url,所以这个地址我们需要用到vue-cli3.0的环境变量Promise.all([contents.addStylesheet(`${process.env.VUE_APP_RES_URL}/fonts/cabin.css`),contents.addStylesheet(`${process.env.VUE_APP_RES_URL}/fonts/daysOne.css`),contents.addStylesheet(`${process.env.VUE_APP_RES_URL}/fonts/montserrat.css`),contents.addStylesheet(`${process.env.VUE_APP_RES_URL}/fonts/tangerine.css`) ]).then(() => {console.log('已经加载完毕,干些什么呢')})})

设置完成之后记得重启服务器

功能点5实现

在EbookReader.vue组件的prevPage、nextPage、showTitleAndMenu事件中添加this.setFontFamilyVisible(false);

设置字体font-family --项目开发记录(六)相关推荐

  1. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  2. 尚硅谷——谷粒商城项目开发记录——2021.11.21

    尚硅谷--谷粒商城项目开发记录--2021.11.21 概念: 1.var和let的区别: 作用域: var 声明的变量往往会越域 let 声明的变量有严格局部作用域 声明次数: var 可以声明多次 ...

  3. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  4. 尚硅谷——谷粒商城项目开发记录——2021.11.19

    尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...

  5. 尚硅谷——谷粒商城项目开发记录——2021.11.22

    尚硅谷--谷粒商城项目开发记录--2021.11.22 概念: 1.对象优化: 新增的API: ES6 给 Object 拓展了许多新的方法,如: keys(obj): 获取对象的所有 key 形成的 ...

  6. 尚硅谷——谷粒商城项目开发记录——2021.11.20

    尚硅谷--谷粒商城项目开发记录--2021.11.20 概念: 1.SpringCloud Alibaba: 简介: Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此 ...

  7. vue-music(1)音乐播发器 项目开发记录

    Vue-Music 跟学一个网课老师做的仿原生音乐APP跟学的笔记,记录点滴,也希望对学习vue初学小伙伴有点帮助 一| 前期工作 1.项目初始化 npm install -g vue-cli vue ...

  8. 普中28335开发攻略_TMS320F28335项目开发记录1_CCS的使用介绍

    CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...

  9. TMS320F28335项目开发记录1_CCS的使用介绍

    CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...

最新文章

  1. 关于学习Python的一点学习总结(39->导入模块)
  2. leetcode 412. Fizz Buzz
  3. JavaScript 温故知新 00
  4. 剖析入侵技术 嗅探软件了解
  5. OA、CRM、进销存集成了,美女也不再愁了
  6. System Center Configuration Manager 2016 域准备篇(Part2)
  7. 03.CSS选择器--交集并集选择器
  8. 为什么下拉框拉不下来_为什么分手后对方不删除拉黑你,但又不和你复合?
  9. 知名国产论坛,凉了!!!!
  10. KnockOutJS入门
  11. 空调冷凝水管径选用原则
  12. OpenCV 单/多目标跟踪传统算法实验
  13. python编程的线性/非线性规划问题求解
  14. 基于Nexus搭建maven私有源仓库
  15. element-plus icon图标的正确使用姿势
  16. JavaSE自学笔记016_Real(多线程)
  17. Python入门-数据库
  18. OLT(光线路终端)介绍
  19. ZuulException: Forwarding error java.net.UnknownHostException: DESKTOP-QBA1AHC:
  20. PHP 开发环境配置

热门文章

  1. 干货 |VALSE 2019总结 --PPT 打包下载
  2. BOC保护的苯丙氨酸锌卟啉(Zn·TAPP-Phe-BOC)/铁卟啉(Fe·TAPP-Phe-BOC)/镍卟啉(Ni·TAPP-Phe-BOC)/锰卟啉(Mn·TAPP-Phe-BOC)齐岳科普
  3. GAN(对抗生成网络)原理及数学推导
  4. (转)永磁同步电机工作原理(https://blog.csdn.net/jianwen01/article/details/5931881)
  5. .net Core 2.2实现京东宙斯API采用OAuth授权方式调用
  6. 远程连接阿里云主机服务器(Linux系统)
  7. 【306天】我爱刷题系列065(2017.12.08)
  8. 7月8日,腾讯电子签棋煜“签千万”专场招商会,重磅来袭
  9. 二叉树的基本概念与例题(一学就会)
  10. 在linux中启动mysql,在linux中启动mysql服务的命令