• vue2.0 使用 vue-aplayer


    1.安装

    npm i vue-aplayer

    2.引入

    import VueAplayer from 'vue-aplayer'
     name: "Aplayer",
      props: ["pdfurl"],
     components: {
        //别忘了引入组件
        'a-player': VueAplayer
      },

    3.初始化

    flag:false,
          musicList:'', 
          songList:{
             src:''
          },

    4.async await 异步加载,先加载出player再使用

     async mounted () {
        //async   await 异步加载,先加载出player再使用
        await this.handleSuccess();
        let aplayer = this.$refs.player.control;
         console.log(this.$refs.player);
        aplayer.play();
      },

    5.方法

    在里面给数据赋值

     async   handleSuccess(res, file) {
          console.log(res);
          console.log(file);
          let nm = [];
          this.uploadList.map(item => {
            nm.push(item.response.data.url);
          });
          this.formValidate.musicUrl = nm.toString();
          //给音乐播放器的必要属性赋值
          console.log(this.formValidate.musicUrl);
          //给src 赋值
          this.songList.src=this.formValidate.musicUrl;
          //给标题赋值
          this.songList.title= file.name;
          //截取file.name 获取除后4位的字符串                 
          this.formValidate.musicName = (file.name).substring(0,(file.name).length-4);
           //给音乐播放器的作者赋值
           var arr                    = (file.name).split("-");
           this.songList.artist =arr[0];
          //让音乐播放器显示
          this.flag = true;
          console.log(this.formValidate.musicUrl);
        },

    demo

    <template>
      <Card>
        <h2>
          <Icon type="md-book"/>基本信息
        </h2>
        <Divider/>
        <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">
          <FormItem label="最大年龄:" prop="musicMaxAge">
            <Input type="text" v-model="formValidate.musicMaxAge" placeholder="请输入最大年龄" number></Input>
          </FormItem>
          <FormItem label="最小年龄:" prop="musicMinAge">
            <Input type="text" v-model="formValidate.musicMinAge" placeholder="请输入最小年龄" number></Input>
          </FormItem>
          <FormItem label="音乐名称" prop="musicName">
            <Input type="text" v-model="formValidate.musicName" placeholder="请输入音乐名称"></Input>
          </FormItem>
          <FormItem label="音乐风格" prop="musicStyle">
            <Input type="text" v-model="formValidate.musicStyle" placeholder="请输入音乐名称"></Input>
          </FormItem>
          <FormItem prop="musicSex" label="音乐属性">
            <Select v-model="formValidate.musicSex" style="100px">
              <Option v-for="item in musicSex" :value="item.value" :key="item.value">{{ item.label }}</Option>
            </Select>
          </FormItem>
          <div style="position: relative">
             <a-player :music="songList" :showLrc="true" :mine="true" theme="#b7daff" mode="circulation" v-if="flag" listMaxHeight='96px' ref="player"></a-player>
          </div>
          <FormItem style=" 100%" label="音乐上传" prop="musicUrl">
            <div class="demo-upload-list" v-for="item in uploadList" :key="item.index">
              <template v-if="item.status === 'finished'">
                <audio :src="item.response.data.url"></audio>
                <div class="demo-upload-list-cover">
                  <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
                </div>
              </template>
              <template v-else>
                <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
              </template>
            </div>
            <Upload
              ref="upload"
              :show-upload-list="false"
              :default-file-list="defaultList"
              :on-success="handleSuccess"
              :format="['wma','mp3','ogg']"
              :max-size="10240"
              :on-format-error="handleFormatError"
              :on-exceeded-size="handleMaxSize"
              :before-upload="handleBeforeUpload"
              multiple
              type="drag"
                action="/rule/sys/oss/upload"
              style="display: inline-block;58px;"
            >
              <div style="58px;height:58px;line-height: 58px;">
                <Icon type="ios-camera" size="20"></Icon>
              </div>
            </Upload>
            <Modal title="View Image" v-model="visible">
              <audio :src="imgs" v-if="visible" style=" 100%"></audio>
            </Modal>
          </FormItem>
          <FormItem v-if="formValidate.musicUrl !== null" label="音乐路径" prop="musicUrl">
            <Input type="text" v-model="formValidate.musicUrl" placeholder></Input>
          </FormItem>
          <FormItem label="备注" prop="remarks">
            <Input type="text" v-model="formValidate.remarks" placeholder="请输入"></Input>
          </FormItem>
          <FormItem>
            <Button type="primary" @click="handleSubmit('formValidate')">保存</Button>
            <Button @click="handleReset('formValidate')" style="margin-left: 8px">取消</Button>
          </FormItem>
        </Form>
      </Card>
    </template>
    <script>
    //引入音乐播放器
    import VueAplayer from 'vue-aplayer'
    import { addMusic } from "../../api/music.js";
    
    export default {
      name: "Aplayer",
      props: ["pdfurl"],
     components: {
        //别忘了引入组件
        'a-player': VueAplayer
      },
      data() {
        const validateminAge = (rule, value, callback) => {
          if (!value) {
            return callback(new Error("最小年龄不能为空"));
          }
          // 模拟异步验证效果
          setTimeout(() => {
            if (!Number.isInteger(value)) {
              callback(new Error("请输入一个整数"));
            } else {
              if (value < 0 || value > 135) {
                callback(new Error("年龄只允许在0到135之间"));
              } else {
                callback();
              }
            }
          }, 1000);
        };
        const validatemaxAge = (rule, value, callback) => {
          if (!value) {
            return callback(new Error("最大年龄不能为空"));
          }
          // 模拟异步验证效果
          setTimeout(() => {
            if (!Number.isInteger(value)) {
              callback(new Error("请输入一个整数"));
            } else {
              if (value < 0 || value > 135) {
                callback(new Error("年龄只允许在0到135之间"));
              } else {
                callback();
              }
            }
          }, 1000);
        };
        return {
         flag:false,
          musicList:'', 
          songList:{
             src:''
          },
          uploadList: [],
          imgName: "",
          imgs: "",
          visible: false,
          defaultList: [],
          formValidate: {
            musicMaxAge: "",
            musicMinAge: "",
            musicName: "",
            musicSex: "",
            remarks: "",
            musicUrl: ""
          },
          ruleValidate: {
            musicMaxAge: [{ validator: validatemaxAge, trigger: "blur" }],
            musicMinAge: [{ validator: validateminAge, trigger: "blur" }],
            musicName: [
              { required: true, message: "音乐名称不能为空", trigger: "blur" }
            ],
            musicSex: [
              { required: true, message: "音乐属性不能为空", trigger: "blur" }
            ],
            musicUrl: [
              { required: true, message: "音乐路径不能为空", trigger: "blur" }
            ],
            musicStyle: [
              { required: true, message: "音乐风格不能为空", trigger: "blur" }
            ]
          },
          musicSex: [
            {
              value: "0",
              label: "普通"
            },
            {
              value: "1",
              label: "男性"
            },
            {
              value: "2",
              label: "女性"
            }
          ]
        };
      },
       async mounted () {
        //async   await 异步加载,先加载出player再使用
        await this.handleSuccess();
        let aplayer = this.$refs.player.control;
         console.log(this.$refs.player);
        aplayer.play();
      },
      mounted() {
        this.uploadList = this.$refs.upload.fileList;
      },
      methods: {
        handleSubmit(name) {
          this.$refs[name].validate(valid => {
            if (valid) {
              addMusic(this.formValidate)
                .then(res => {
                  this.$Message.success("Success!");
                  this.$router.go(-1);
                })
                .catch(error => {});
            } else {
              this.$Message.error("Fail!");
            }
          });
        },
        handleReset(name) {
          this.$refs[name].resetFields();
        },
        // 上传开始
        handleRemove(file) {
          const fileList = this.$refs.upload.fileList;
          this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);
          this.formValidate.musicUrl = "";
          this.formValidate.musicName="";
          this.songList.src="";
           this.flag = false;
        },
        async   handleSuccess(res, file) {
          console.log(res);
          console.log(file);
          let nm = [];
          this.uploadList.map(item => {
            nm.push(item.response.data.url);
          });
          this.formValidate.musicUrl = nm.toString();
          //给音乐播放器的必要属性赋值
          console.log(this.formValidate.musicUrl);
          //给src 赋值
          this.songList.src=this.formValidate.musicUrl;
          //给标题赋值
          this.songList.title= file.name;
          //截取file.name 获取除后4位的字符串                 
          this.formValidate.musicName = (file.name).substring(0,(file.name).length-4);
           //给音乐播放器的作者赋值
           var arr                    = (file.name).split("-");
           this.songList.artist =arr[0];
          //让音乐播放器显示
          this.flag = true;
          console.log(this.formValidate.musicUrl);
        },
        handleFormatError(file) {
          this.$Notice.warning({
            title: "文件格式不正确",
            desc: "文件" + file.name + "格式不正确,请上传MP3格式"
          });
        },
        handleMaxSize(file) {
          this.$Notice.warning({
            title: "超出文件大小范围",
            desc: "文件" + file.name + " 太大了, 不允许超过 500M."
          });
        },
        handleBeforeUpload() {
          const check = this.uploadList.length < 1;
          if (!check) {
            this.$Notice.warning({
              title: "最多只能传一个音乐"
            });
          }
          return check;
        }
        // 上次结束
      }
    };
    </script>
    <style scoped>
    .demo-upload-list {
      display: inline-block;
       80px;
      height: 80px;
      text-align: center;
      line-height: 100px;
      border: 1px solid transparent;
      border-radius: 4px;
      overflow: hidden;
      background: #fff;
      position: relative;
      box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
      margin-right: 4px;
    }
    
    .demo-upload-list img {
       100%;
      height: 100%;
    }
    
    .demo-upload-list-cover {
      display: none;
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      background: rgba(0, 0, 0, 0.6);
    }
    
    .demo-upload-list:hover .demo-upload-list-cover {
      display: block;
    }
    
    .demo-upload-list-cover i {
      color: #fff;
      font-size: 20px;
      cursor: pointer;
      margin: 0 2px;
    }
    </style>

  • 相关阅读:
    8.11 hdu 多校第五场补题
    8.10 trie树模板
    8.6 edu25 ,577#div2 CF补题(二分 ,dp 与 贪心
    8.4 POJ 3237 (树链剖分+线段树
    8.4 poj 2763 Housewife Wind (树链剖分边权处理
    8.4 树链剖分
    8.3 树链剖分
    2019 hdu 第四场补题 (2
    2019 hdu 第四场补题 (1 ,签到题
    51NOD 1137 矩阵乘法
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/10886447.html
Copyright © 2020-2023  润新知