为了账号安全,请及时绑定邮箱和手机立即绑定

完美解决,点击下一页上一页,进度条跟着变化的问题!

具体代码如下:

1.在Ebook.vue的data中定义progress=0

https://img1.sycdn.imooc.com//5bdc5a64000184de04560405.jpg

2.把Ebook.vue的progress传给子组件Menubar,名字叫做parentProgress(为了在子组件中不重名)

https://img1.sycdn.imooc.com//5bdc5a620001b0bf03810353.jpg

3.在Ebook.vue中在上一页和下一页方法中添加如下代码,主要是为了获取progress的数值

https://img1.sycdn.imooc.com//5bdc5a630001673408980607.jpg

以上都是在Ebook.vue中的操作



--------------------------------------------



4.接着来到Menubar中通过props接收父组件传过来的值

5.data中的progress是在input type=range 进度条的绑定的value

https://img1.sycdn.imooc.com//5bdc5a640001bef204370615.jpg

6.最为关键的一步,通过watch监听父组件传过来的parentProgress的值是否变化,如果变化,则把变化的值赋值给进度条的progress,并且修改进度条的css样式。

watch采用的是深度方式deep:true

https://img1.sycdn.imooc.com//5bdc5a6400019e9708560486.jpg


正在回答

8 回答

谢谢你继续扩展阅读器的功能

0 回复 有任何疑惑可以回复我~

章节跳转似乎并不能用这个方法解决。跳转之后 

const currentLocation = this.rendition.currentLocation()

返回的还是跳转之前的location,有什么方法解决吗?

0 回复 有任何疑惑可以回复我~


按照1L同学 ‘微光世界’ 的思路,确实解决了报错的问题。

但是Bug本身并没有解决,即在locations对象未加载完毕时,点击前后翻页,进度条不更新。

http://img1.sycdn.imooc.com//5d844551000112b009190529.jpg


解决这个Bug  我所想到的思路是:

在locations对象加载完毕的时候,去改变progress的值。这样当加载完成时,就能正常显示当前位置的进度条。

a.监听父组件传来的bookVailable值

  bookVailable开始为false, 在加载完毕时变为true,此时会执行watch里的函数

http://img1.sycdn.imooc.com//5d84473c0001234712990255.jpg


b.调用父组件的函数

http://img1.sycdn.imooc.com//5d84475e0001cf3f09110206.jpg

c.改变progress的值

http://img1.sycdn.imooc.com//5d8447b40001075608820370.jpg

                        http://img1.sycdn.imooc.com//5d8447ce0001d2c613490270.jpg  

这样progress改变,小球的位置就改变了,又因为监听了progress,所以样式也会动态改变。

此时,在locations对象未加载完毕时,点击翻页,进度条也能正常展示。Bug解决

http://img1.sycdn.imooc.com//5d84483f000123b508910750.jpg






1 回复 有任何疑惑可以回复我~

因为locations还没有生成所以上下页无法点击,所以你还要写一个窗口来提示加载完成,或者在一开始的初始化时就直接加上

0 回复 有任何疑惑可以回复我~

v-else-if 改成v-show也可以

0 回复 有任何疑惑可以回复我~

其余逻辑都差不多,通过监听Ebook中progress的变化来更新进度条的展示,在展示部分我这边进行了修改,

https://img1.sycdn.imooc.com//5c6fab2c0001d2ea06020486.jpg

https://img1.sycdn.imooc.com//5c6fab3e000144ef03750233.jpg

使用属性绑定(v-bind:style)+计算属性(computed)来更新progress的样式,这样不需要根据this.$refs.progress来获取progress,因为progress是在v-else-if代码块中,所以,如果用户没有打开过这个设置项,就不会渲染进来,会出现this.$refs中没有progress的情况,如下

https://img1.sycdn.imooc.com//5c6fabec00018bb807230358.jpg

使用计算属性则避免了这种情况。只要在progress变化时,就会重新计算backgroundSize的值赋给绑定的style中。

0 回复 有任何疑惑可以回复我~
#1

搬砖侠

前面要改吗
2019-02-27 回复 有任何疑惑可以回复我~
#2

superychen 回复 搬砖侠

不需要
2019-02-27 回复 有任何疑惑可以回复我~

附加:发现章节跳转也没有同步进度条

https://img1.sycdn.imooc.com//5c3c468100013c4710240146.jpg

集成到一个函数中

然后在jumpTo() ,nextPage(),prevPage() 中调用即可

https://img1.sycdn.imooc.com//5c3c471f000145a704990140.jpg

1 回复 有任何疑惑可以回复我~
#1

彭小呆 提问者

谢谢你的补充
2019-02-18 回复 有任何疑惑可以回复我~
#2

qq_elderlyboy_000

我的点章节跳转时候,报这个错误:Cannot read property 'cfi' of undefined at VueComponent.showProgress
2019-09-16 回复 有任何疑惑可以回复我~

bug修复

根据楼主的方法,存在一些小bug,在locations对象未加载完成时进行翻页控制台会报错

https://img1.sycdn.imooc.com//5c3bebc5000163a206670068.jpgbug1

改进如下

https://img1.sycdn.imooc.com//5c3beb0300014d5a10820294.jpg[ebook.vue]

另,在watch方法里也存在locations对象的问题;

还有ebookProgress(楼主命名为parentProgress)的值变化时,this.$refs.progress会变成undefined,

https://img1.sycdn.imooc.com//5c3bee790001c3fc06550400.jpgbug2_1

若等待locations对象加载完(进度条加载完)再进行翻页就不会出现这个问题,可能是两个进度调节方法不同步导致??

https://img1.sycdn.imooc.com//5c3bf0770001cebd06410209.jpgbug2_2

这里偷下懒

https://img1.sycdn.imooc.com//5c3bf1180001ead607290274.jpg[menuBar.vue]

以上是我再加了楼主的代码后遇到并解决的问题


1 回复 有任何疑惑可以回复我~
#1

彭小呆 提问者

可以可以,很细心
2019-02-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

完美解决,点击下一页上一页,进度条跟着变化的问题!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信