vue中引入js,然后new js里的方法
阿里云Web播放器Web端使用SDK说明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101.searchclickresult.15a92458LoTQhA
vue项目中要使用阿里云的播放器,步骤如下:
先在index.html中引入需要的js,css
<link rel="stylesheet" href="//g.alicdn.com/de/prismplayer/2.7.2/skins/default/aliplayer-min.css" />
<script src="//g.alicdn.com/de/prismplayer/2.7.2/aliplayer-h5-min.js"></script>
<script src="//g.alicdn.com/de/prismplayer/2.7.2/json/json.min.js"></script>
Vue组件中
template代码:
<section class="playBox prism-player videoplayIfram" id="AlivideoPlay"></section>
id是必须的
script代码:
aliyunPlay () {
/* eslint-disable */
this.player = new Aliplayer({
id: 'AlivideoPlay', // template里定义的部分
width: '100%',
height: '100%',
vid : this.AliUrl, // url (必须)
playauth : this.playauth, // (必须)
showBarTime: ,
qualitySort: "asc"
}, function (player) {
// console.log("播放器创建成功");
});
}
Vue完整代码:
<template>
<transition name="slide">
<div class="videoplayback">
<div class="videoPlayTop">
<div class="passwordTip" v-show="ifShowPassword">播放密码:{{passwordTip}}</div>
<div class="goBack" @click="videoplayHidden">
<div class="imgDiv">
<img src="http://static.crecgec.com/wxmobile/left_arrow.png"/>
</div>
</div>
<div class="videoOperation" @click="changeVocon">
<div class="videoOperationImg">
<img src="http://static.crecgec.com/wxmobile/videoOperation.png"/>
</div>
</div>
</div>
<div class="videoplay" ref='videoplay'>
<!--<iframe class="videoplayIfram" :src='AliUrl' frameborder= ></iframe>-->
<section class="playBox prism-player videoplayIfram" id="AlivideoPlay"></section>
<!-- <div class="prism-player videoplayIfram" id="prismPlayer"></div> -->
<div class="noVideoPlay" v-show="noVideoPlayShow">视频暂时无法播放</div>
</div>
<div class="videoOperationCon" v-show="voconShow">
<div class="voconItem" v-if="favorite === null" @click="collectionYes">
<div class="divImg">
<img src="http://static.crecgec.com/wxmobile/collection.png"/>
</div>
<div class="divVal">收藏</div>
</div>
<div class="voconItem" v-else @click="collectionNo">
<div class="divImg">
<img src="http://static.crecgec.com/wxmobile/collectionHas.png"/>
</div>
<div class="divVal">已收藏</div>
</div>
<div class="voconItem" @click='shareopen'>
<div class="divImg">
<img src="http://static.crecgec.com/wxmobile/share.png"/>
</div>
<div class="divVal">分享</div>
</div>
<div class="voconItem" @click="commentConShow">
<div class="divImg">
<img src="http://static.crecgec.com/wxmobile/scorEoperation.png"/>
</div>
<div class="divVal">评分</div>
</div>
</div>
<div class="commentShow" v-show="commentShow">
<div class="commentCon">
<div class="closeCommentCon">
<a class="commentConClose" @click.stop="commentConClose">
<div class="commentConCloseImg">
<img src="http://static.crecgec.com/wxmobile/close.png"/>
</div>
</a>
</div>
<van-rate
class="scroeRate"
v-model="scoreVal"
:size=""
:count=""
color="#398ed1"
void-color="#ceefe8"
/>
<a class="commentSubmit" @click.stop="commentSubmit">提交</a>
</div>
</div>
<div class="playTitle">{{playTitle}}</div>
<div class="playDetails">
<div class="detailsPlay">
<div class="classHour">共{{classHour}}课时</div>
<a class="goCourseDetail" @click="videoplayHidden">课程详情></a>
</div>
</div>
<div class="catalog-list">
<ul v-if="catalogList.length > 0">
<li v-for="(item, index) in catalogList" :key="index" @click="changeVideoPlay(index)">
<div class="catalog-list-title">{{item.sc_name}}</div>
</li>
</ul>
<div class="noLists" v-else>没有数据</div>
</div>
<!-- 分享 -->
<van-actionsheet v-model="shareSelect" title="分享" class="shareCh">
<div class="bdsharebuttonbox bdshare-button-style0-32">
<div class="shareline" @click='Qzshare'>
<a class="bds_qzone" data-cmd="qzone" href="javascript:;"></a>
<p>QQ空间</p>
</div>
<div class="shareline" @click='tsina'>
<a class="bds_tsina" data-cmd="tsina" href="javascript:;"></a>
<p>微博</p>
</div>
<div class="shareline" v-clipboard:copy="copyUrl" v-clipboard:success="onCopy" v-clipboard:error="onError">
<a class="bds_copyurl" data-cmd="copyurl" href="javascript:;"></a>
<p>复制链接</p>
</div>
</div>
</van-actionsheet>
</div>
</transition>
</template> <script type="text/ecmascript-6">
import {mapGetters} from 'vuex'
import bdshare from 'bdshare'
import { Toast } from 'vant'
/*
import 'common/js/aliplayer-h5-min.js'
import 'common/js/json.min.js'
*/ export default {
props: {
catalogList: {
type: Array,
default: () => []
},
lession: {},
favorite: '',
videoPlayIndex: {
type: Number,
default:
},
c_id: {
type: Number,
default:
},
videoplayShow: {
type: Boolean,
default: false
}
},
data () {
return {
videoSrc: '',
playTitle: '',
classHour: ,
voconShow: false,
isCollect: false,
scoreVal: , // 当前分值
commentShow: false,
AliUrl: '', // 视频url
vid: '',
playauth: '',
shareSelect: false,
noVideoPlayShow: false,
passwordTip: '',
ifShowPassword: false,
copyUrl: window.location.href,
submitIsCollection: true,
s_id: '', // 课时ID
player: null,
shareConfig: {
bdText: this.$store.state.courseName,
bdUrl: this.$store.state.bdUrl,
bdPic: this.$store.state.bdPic
}
}
},
watch: {
videoplayShow (val) {
if (val === true) {
this.classHour = this.catalogList.length
if (this.catalogList.length > ) {
this.changeVideoPlay(this.videoPlayIndex)
}
}
}
},
methods: {
videoplayHidden () {
this.voconShow = false
this.$emit('videoHidden', false)
},
changeVideoPlay (index) {
if (this.player) {
this.player.dispose()
var oSection = document.createElement('section')
oSection.className = 'playBox prism-player videoplayIfram'
oSection.id = 'AlivideoPlay'
this.$refs.videoplay.appendChild(oSection)
}
this.videoOverdue(this.catalogList[index].id, index)
},
changeVocon () {
this.voconShow = !this.voconShow
},
// 收藏
collectionYes () {
let _this = this
if (this.submitIsCollection) {
this.submitIsCollection = false
_this.axios({
method: 'post',
url: _this.api.course.favorite,
data: {
cid: this.c_id,
token: _this.api.token,
client: _this.api.encodeClient
}
})
.then(function (response) {
if (response.status === && response.data.states === true) {
_this.$emit('changeFavorites', true)
}
_this.submitIsCollection = true
})
.catch(function (error) {
console.log(error)
_this.submitIsCollection = true
})
}
},
// 取消收藏
collectionNo () {
let _this = this
if (this.submitIsCollection) {
_this.axios({
method: 'post',
url: _this.api.course.unfavorite,
data: {
cid: this.c_id,
token: _this.api.token,
client: _this.api.encodeClient
}
})
.then(function (response) {
if (response.status === && response.data.states === true) {
_this.$emit('changeFavorites', true)
}
_this.submitIsCollection = true
})
.catch(function (error) {
console.log(error)
_this.submitIsCollection = true
})
}
},
// 评分提交
commentSubmit () {
let _this = this
_this.axios({
method: 'post',
url: _this.api.course.ajaxpinglunadd,
data: {
sec_score: this.scoreVal,
s_id: this.s_id,
c_id: this.c_id,
token: _this.api.token,
client: _this.api.encodeClient
}
})
.then(function (response) {
if (response.status === && response.data.success === true) {
_this.$toast('评分成功!')
_this.evaluation = ''
_this.commentConClose()
}
})
.catch(function (error) {
console.log(error)
})
},
// 打开评分弹出层
commentConShow () {
this.commentShow = true
},
// 关闭评分弹出层
commentConClose () {
this.commentShow = false
},
shareopen () {
this.shareSelect = true
},
Qzshare () {
bdshare.qzone(this.shareConfig)
},
tsina () {
bdshare.tsina(this.shareConfig)
},
// 查看课程视频是否过期
videoOverdue (id, index) {
let _this = this
_this.axios({
method: 'get',
url: _this.api.course.study,
params: {
id: id,
token: _this.api.token,
client: _this.api.encodeClient
}
})
.then(function (response) {
if (response.status === && response.data.state === true) {
_this.noVideoPlayShow = false
_this.passwordTip = _this.catalogList[index].playpass
if (_this.catalogList[index].videolocation === 'aliyun') {
_this.ifShowPassword = false
} else {
_this.ifShowPassword = true
}
_this.AliUrl = response.data.data.lession.yun_url
_this.playauth = response.data.data.lession.PlayAuth
_this.playTitle = _this.catalogList[index].sc_name
_this.s_id = _this.catalogList[index].id
_this.aliyunPlay()
} else {
_this.noVideoPlayShow = true
}
})
.catch(function (error) {
console.log(error)
})
},
onCopy (e) {
this.shareSelect = false
Toast('复制链接成功')
},
onError () {
this.shareSelect = false
Toast('复制链接失败')
},
aliyunPlay () {
/* eslint-disable */
this.player = new Aliplayer({
id: 'AlivideoPlay',
width: '100%',
height: '100%',
vid : this.AliUrl,
playauth : this.playauth,
showBarTime: ,
qualitySort: "asc"
}, function (player) {
// console.log("播放器创建成功");
});
}
},
components: {
...mapGetters([
'courseName', 'bdUrl', 'bdPic'
])
}
}
</script> <style scoped lang="less" rel="stylesheet/less" type="text/less">
@import "../../common/less/variable"; .videoplayback{
position: absolute;
z-index: ;
top: -90px;
bottom: ;
left: ;
right: ;
background-color: #f3f5f7;
.videoPlayTop{
position: relative;
height: 90px;
background-color: rgba(, , , 0.7);
.goBack{
margin-left: 10px;
width: 58px;
height: 90px;
vertical-align: middle;
text-align: center;
display: flex;
justify-content:center;
align-items:Center;
float: left;
.imgDiv{
width: 18px;
height: 30px;
img{
display: inline-block;
float: left;
width: %;
height: %;
}
}
}
.passwordTip{
position: absolute;
left: %;
top: %;
transform: translate(-%, -%);
color: #fff;
font-size: 28px;
}
.videoOperation{
width: 80px;
height: 90px;
float: right;
margin-right: 10px;
display: flex;
justify-content:center;
align-items:Center;
.videoOperationImg{
width: 30px;
height: 6px;
img{
display: inline-block;
float: left;
width: %;
height: %;
}
}
}
}
.videoplay{
width: %;
height: 420px;
background-color: rgba(, , , 0.7);
position: relative;
.videoplayIfram{
width: %;
height: 420px;
}
.noVideoPlay{
position: absolute;
color: #fff;
left: %;
top: %;
transform: translate(-%, -%);
}
}
.videoOperationCon{
position: absolute;
background-color: #fff;
border-radius: 4px;
margin-top: 10px;
top: 80px;
right: 30px;
display: flex;
flex-direction: column;
padding-bottom:26px;
padding-right: 26px;
padding-left: 26px;
.voconItem{
line-height: 28px;
padding-top: 26px;
&:first-child{
padding-top: 22px;
}
.divImg{
width: 30px;
height: 28px;
display: inline-block;
img{
vertical-align: top;
width: %;
height: %;
}
}
.divVal{
display: inline-block;
font-size: @font-size-;
color: #;
margin-left: 10px;
}
}
}
.commentShow{
position: fixed;
left: ;
top: ;
right: ;
bottom: ;
z-index: ;
background-color: rgba(, , , 0.5);
.commentCon{
position: absolute;
width: %;
padding-bottom: 50px;
/*height: 200px;*/
background-color: #fff;
left: %;
top: %;
transform: translate(-%, -%);
border: 1px solid #eeeeee;
border-radius: 10px;
.closeCommentCon{
overflow: hidden;
.commentConClose{
float: right;
padding: 10px;
margin-right: 10px;
.commentConCloseImg{
width: 30px;
height: 30px;
img{
width: %;
height: %;
}
}
}
}
.scroeRate{
margin-top: 10px;
}
.commentSubmit{
display: inline-block;
padding: 5px 10px;
color: #fff;
font-size: @font-size-;
line-height: 40px;
border-radius: 10px;
background-color: #398ed1;
margin-top: 30px;
}
}
}
.playTitle{
color: #;
font-size: @font-size-;
text-align: left;
background-color: #fff;
padding: 40px 30px;
font-weight: bold;
}
.playDetails{
padding: 20px 30px ;
margin-top: 20px;
background-color: #ffffff;
overflow: hidden;
.detailsPlay{
border-bottom: 1px solid #dcdcdc;
overflow: hidden;
padding-bottom: 20px;
.classHour{
float: left;
color: #;
font-size: @font-size-;
}
.goCourseDetail{
float: right;
color: #8a8a8a;
font-size: @font-size-;
}
}
}
.catalog-list{
text-align: left;
background-color: #fff;
overflow: hidden;
ul{
overflow: hidden;
padding: 10px 30px;
li{
margin: 30px 30px ;
line-height: 24px;
overflow: hidden;
.catalog-list-title{
float: left;
margin-left: 20px;
color: #;
font-size: @font-size-;
}
}
.on{
.catalog-list-title{
color: #398ed1;
}
}
}
.noLists{
overflow: hidden;
padding: 20px;
font-size: @font-size-;
text-align: center;
}
}
}
.slide-enter-active,.slide-leave-active{
transition: all .3s
}
.slide-enter,.slide-leave-to{
transform: translate3d(%, , )
}
.shareCh{
overflow: hidden;
.shareline{
height: 120px;
width: 150px;
padding-top:36px;
text-align:center;
float: left;
overflow: hidden;
}
.bdshare-button-style0- a{
height: 50px;
width: 32px;
display: block;
margin: auto;
float: initial;
}
.bdshare-button-style0- p{
font-size: @font-size-;
}
.bdshare-button-style0- a.bds_qzone{
background: url(http://static.crecgec.com/wxmobile/kongjian.png) 0 0 no-repeat;
background-size: % auto;
}
.bdshare-button-style0- a.bds_tsina{background: url(http://static.crecgec.com/wxmobile/weibo.png) 0 0 no-repeat;
background-size: % auto;}
.bdshare-button-style0- a.bds_copyurl{background: url(http://static.crecgec.com/wxmobile/copyUrl.png) 0 0 no-repeat;
background-size: % auto;}
}
</style>
vue中引入js,然后new js里的方法的更多相关文章
- iOS之在webView中引入本地html,image,js,css文件的方法 - sky//////////////////////////////////////ZZZZZZZZZZZZZZZ
iOS之在webView中引入本地html,image,js,css文件的方法 2014-12-08 20:00:16CSDN-sky_2016-点击数:10292 项目需求 最近开发的项 ...
- react项目中引入了redux后js控制路由跳转方案
如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...
- vue中引入mintui、vux重构简单的APP项目
最近在学习vue时也了解到一些常用的UI组件,有用于PC的和用于移动端的.用于PC的有:Element(饿了么).iView等:用于移动端APP的有Vux.Mint UI(饿了么).Vant(有赞团队 ...
- vue中引入babel步骤
vue中引入babel步骤 vue项目中普遍使用es6语法,但有时我们的项目需要兼容低版本浏览器,这时就需要引入babel插件,将es6转成es5. 1.安装babel-polyfill插件 npm ...
- vue中引入json数据,不用本地请求
1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...
- vue中引入mui报Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them的错误
在vue中引入mui的js文件的时候,报如下的错误: 那是因为我们在用webpack打包项目时默认的是严格模式,我们把严格模式去掉就ok了 第一步:npm install babel-plugin-t ...
- vue 中引入第三方js库
以 jQuery 为例 一.绝对路径直接引入,全局可用 主入口页面 index.html 中用 script 标签引入: <script src="./static/jquery-1. ...
- 对vue中 默认的 config/index.js:配置的详细理解 -【以及webpack配置的理解】-config配置的目的都是为了服务webpack的配置,给不同的编译条件提供配置
当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面 (环境变量及其基本变量的配置) var path = require('path') ...
- Vue中结合Flask与Node.JS的异步加载功能实现文章的分页效果
你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:http://blog.pushy.site/posts/15 ...
随机推荐
- mybatis-servlet.xml配置SpringMVC样板
<?xml version="1.0" encoding="UTF-8" ?><beans xmlns:xsi="http://ww ...
- linux 操作 json文件
Linux 下 操作 json 文件神器 jq. jq yum install jq -y 查看一个 file.json 文件 # jq . file.json JSON (JavaScript O ...
- spring cloud心跳检测自我保护(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.)
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...
- jira迁移数据
jira迁移数据有两种方式 方式一: jira系统自带的备份恢复操作 最简单的,但不一定能成功 从/export/atlassian/application-data/jira/export下载至 ...
- Leetcode#53.Maximum Subarray(最大子序和)
题目描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大. 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] ...
- mongodb系列~ mongodb慢语句(1)
1 简介:讲讲mongo的慢日志2 慢日志类型 query insert update delete 3 查看慢日志 1 db.system.profile.find() 慢日志总揽 2 d ...
- python基础-----变量和简单数据类型
初识变量 1.变量命名规则: a.字母 b.数字(不能开头) c.下划线 ps.硬性规定,命名必须是字母,数字,下划线,且不能以数字开头. 软性规则,以下划线分割 2.实例: a.写法: age_of ...
- html干货部分
1.标签 a.文本标签:p,span,a,b,i,u,em.文本标签里只能放文字,图片,表单元素. 上标,下标: 5<sup>2</sup>(上标) 8<sub>2 ...
- 【转】Python 面向对象(初级篇)
[转]Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...
- aiojobs
import asyncio import aiojobs async def coro(timeout): print(timeout) await asyncio.sleep(timeout) p ...