进度条样式被覆盖,无法根据进度条颜色对应变化,整条都是黑色的

来源:5-2 阅读进度功能实现(进度拖动功能)

慕鱼树

2019-04-11

图片描述

<!--阅读进度条功能面板-->
<template>
  <transition name="slide-up">
    <div class="setting-wrapper" v-show="menuVisible && settingVisible === 2">
      <div class="setting-progress">
        <!--阅读时间-->
        <div class="read-time-wrapper">
          <span class="read-time-text">111</span>
          <span class="icon-forward"></span>
        </div>
        <!--进度条-->
        <div class="progress-wrapper">
          <!--跳转上一章-->
          <div class="progress-icon-wrapper">
            <span class="icon-back" @click="preSection()"></span>
          </div>
          <!--进度条-->
          <input class="progress" type="range"
                 max="100"
                 min="0"
                 step="1"
                 @change="onProgressChange($event.target.value)"
                 @input="onProgressInput($event.target.value)"
                 :value="progress"
                 :disabled="!bookAvailable"
                 ref="progress">
          <!-- :disabled="!bookAvailable":为了保证电子书还没渲染完成前不进行进度条功能的跳转;需先进行电子书的分页(EbookReader组件中)再使用进度条的功能-->
          <!--跳转下一章-->
          <div class="progress-icon-wrapper">
            <span class="icon-forward" @click="nextSection()"></span>
          </div>
        </div>
        <!--阅读进度文本显示-->
        <div class="text-wrapper">
          <span>{{bookAvailable ? progress + '%' : '加载中...'}}</span>
          <!--//电子书解析之后显示加载中-->
        </div>
      </div>
    </div>
  </transition>
</template>

<script>
  import { ebookMixin } from '../../utils/mixin'

  export default {
    mixins: [ebookMixin],
    methods: {
      // 拖动进度条松开后触发的事件:根据进度条数值跳转位置
      onProgressChange(progress) { // progress是进度条的数值:1-100
        this.setProgress(progress).then(() => {
          // 设置完vuex里的progress,再调用一下方法继续执行
          this.displayProgress()
          this.updateProgressBg()
        })
      },
      // 拖动进度条时触发的事件
      onProgressInput(progress) {
        // this.setProgress(progress)实现拖动的时候文本的进度条百分比也实时在变化,因为此处实时改变了vuex中的progress
        this.setProgress(progress).then(() => {
          this.updateProgressBg()
        })
        // this.setProgress(progress).then(() => { this.displayProgress() })
        // 后面的then方法实现了拖动进度条时阅读器内容也在实时变化【此功能可删除】
      },
      // 展示当前进度所在的页面
      displayProgress() {
        const cfi = this.currentBook.locations.cfiFromPercentage(this.progress / 100)
        // 利用book里的locations下的cfiFromPercentage方法(需传入小数)得到此处的cfi
        // console.log(cfi)
        this.currentBook.rendition.display(cfi)
        // 通过rendition下的display()来渲染cfi
      },
      // 设置阅读条的左边(已阅读部分)背景色加深
      updateProgressBg() {
        this.$refs.progress.style.backgroundSize = `${this.progress}% 100%`
        // this.$refs.progress是获取到rel:progress的dom(即本组件中的range)
      },
      preSection() {

      },
      nextSection() {

      }
    }
  }
</script>

<style lang="scss" rel="stylesheet/scss" scoped>
  @import "../../assets/styles/global";
  .setting-wrapper {
    position: absolute;
    bottom: px2rem(48);
    left: 0;
    z-index: 160;
    width: 100%;
    height: px2rem(90);
    background: white;
    box-shadow: 0 px2rem(-8) px2rem(8) rgba(0, 0, 0, .15);
    .setting-progress {
      position: relative;
      width: 100%;
      height: 100%;
      .read-time-wrapper{ //阅读时间样式
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: px2rem(40);
        font-size: px2rem(12);
        @include center
      }
      .progress-wrapper {
        width: 100%;
        height: 100%;
        @include center;
        padding: 0 px2rem(15);
        box-sizing: border-box;
        .progress-icon-wrapper{ // 跳转上下章图标的样式
          font-size: px2rem(20);
        }
        .progress {
          width: 100%;
          -webkit-appearance: none;
          height: px2rem(2); // 进度条高度
          margin: 0 px2rem(10);
          &:focus {
            outline: none;
          }
          &::-webkit-slider-thumb { 
            -webkit-appearance: none; 
            height: px2rem(20);
            width: px2rem(20);
            border-radius: 50%;
            background: white;
            box-shadow: 0 4px 4px 0 rgba(0, 0, 0, .15);
            border: px2rem(1) solid #ddd;
          }
        }
      }
      .text-wrapper {
        position: absolute;
        left: 0;
        bottom: px2rem(10);
        width: 100%;
        color: #333;
        font-size: px2rem(12);
        @include center;
      }
    }
  }
</style>

已根据其他同学的答案,换了在线主题样式css文件和清除了浏览器缓存,还是无法解决。代码也检查了
只能请老师帮忙看下

写回答

2回答

Sam

2019-04-13

代码已经调试,问题的原因应该是本地的样式文件没有完全加载完,可以检查下本地nginx目录下的资源文件,你可以这样改一下:

第一步,打开.env.development,写入以下配置:

VUE_APP_RES_URL=http://47.99.166.157/book/res
VUE_APP_EPUB_URL=http://47.99.166.157

第二步,打开EbookReader.vue,149行:

const url = process.env.VUE_APP_EPUB_URL + '/epub/' +
         this.fileName + '.epub'

然后重新运行,问题就解决了,将资源文件替换为线上版本就没问题,说明问题出在资源文件上,与进度条背景相关的样式文件是theme文件下的四个样式文件:

-rw-r--r-- 1 root root 2723 10月 16 22:47 theme_default.css
-rw-r--r-- 1 root root 2721 10月 16 22:47 theme_eye.css
-rw-r--r-- 1 root root 2723 10月 16 22:47 theme_gold.css
-rw-r--r-- 1 root root 2717 10月 16 22:47 theme_night.css

重点看下这几个文件是否有问题

0
2
wendy_10
回复
慕鱼树
请问一下去哪下载这四个新的样式文件?
2020-02-19
共2条回复

Sam

2019-04-11

方便的话,将代码上传到git发来看一下吧

0
4
Sam
回复
慕鱼树
问题解决了,看下上面的回复
2019-04-13
共4条回复

Vue 实战商业级读书Web APP完整项目

Vue全家桶+最新前端技术+前后端分离架构,完整项目流程

1610 学习 · 1951 问题

查看课程