优化:移动端音频预览
This commit is contained in:
parent
8953acc7bd
commit
b5aa808f3b
@ -2951,8 +2951,6 @@ export default {
|
|||||||
}
|
}
|
||||||
if (row.contentType.indexOf('audio') > -1) {
|
if (row.contentType.indexOf('audio') > -1) {
|
||||||
// 音频文件
|
// 音频文件
|
||||||
// this.audioPreviewVisible = true
|
|
||||||
// this.audioPreviewRow = row
|
|
||||||
Bus.$emit('onAddAudio', row, this.audioCoverUrl)
|
Bus.$emit('onAddAudio', row, this.audioCoverUrl)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div ref="audioPreview" v-if="show">
|
<div ref="audioPreview" v-if="show">
|
||||||
<div class="audio-player"
|
<div class="audio-player"
|
||||||
v-aplayerDrag="{ x: transformX, y: transformY }"
|
v-aplayerDrag="{ x: transformX, y: transformY }"
|
||||||
@mouseenter="closeBarShow = true" @mouseleave="closeBarShow = false">
|
@mouseenter="closeBarShow = true" @mouseleave="closeBarShow = false" @touchmove="closeBarShow = true" @touchend="touchend">
|
||||||
<aplayer
|
<aplayer
|
||||||
ref="audioPlayer"
|
ref="audioPlayer"
|
||||||
autoplay
|
autoplay
|
||||||
@ -35,7 +35,8 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
transformX: (document.body.clientWidth-500)/2,
|
pc: this.$pc,
|
||||||
|
transformX: !this.$pc ? 20: (document.body.clientWidth-500)/2,
|
||||||
transformY: 0,
|
transformY: 0,
|
||||||
show: false,
|
show: false,
|
||||||
closeBarShow: false,
|
closeBarShow: false,
|
||||||
@ -49,7 +50,7 @@ export default {
|
|||||||
theme: '', // 歌曲的主题色,会覆盖播放器的主题色
|
theme: '', // 歌曲的主题色,会覆盖播放器的主题色
|
||||||
},
|
},
|
||||||
list: [],
|
list: [],
|
||||||
mini: false,
|
mini: !this.$pc,
|
||||||
audioPlayerDoc: undefined
|
audioPlayerDoc: undefined
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -98,6 +99,12 @@ export default {
|
|||||||
this.audioPlayerDoc = undefined
|
this.audioPlayerDoc = undefined
|
||||||
this.$refs.audioPlayer.pause()
|
this.$refs.audioPlayer.pause()
|
||||||
this.list.splice(0, this.list.length)
|
this.list.splice(0, this.list.length)
|
||||||
|
},
|
||||||
|
touchend() {
|
||||||
|
const that = this
|
||||||
|
setTimeout(function (){
|
||||||
|
that.closeBarShow = false
|
||||||
|
}, 2500)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
@ -168,4 +175,25 @@ export default {
|
|||||||
top: -8px;
|
top: -8px;
|
||||||
right: 13px;
|
right: 13px;
|
||||||
}
|
}
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
/deep/.aplayer {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.close-bar {
|
||||||
|
top: -34px;
|
||||||
|
right: -34px;
|
||||||
|
border-radius: 36px;
|
||||||
|
border-width: 20px;
|
||||||
|
z-index: 1;
|
||||||
|
transform: rotate(135deg);
|
||||||
|
border-color: #ff000075;
|
||||||
|
/deep/.audio-player-close {
|
||||||
|
top: -7px;
|
||||||
|
right: -7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.close-bar:hover {
|
||||||
|
border-color: #ff0000eb;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -75,6 +75,49 @@ Vue.directive('aplayerDrag', {
|
|||||||
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
|
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
|
||||||
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
|
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
|
||||||
// 鼠标按下事件
|
// 鼠标按下事件
|
||||||
|
dragDom.addEventListener('touchstart', touchstart, false);
|
||||||
|
dragDom.addEventListener('touchmove', touchmove, false);
|
||||||
|
let disX,disY,styL,styT;
|
||||||
|
function touchstart(e) {
|
||||||
|
// 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
|
||||||
|
disX = e.touches[0].clientX - dialogHeaderEl.offsetLeft;
|
||||||
|
disY = e.touches[0].clientY - dialogHeaderEl.offsetTop;
|
||||||
|
// 获取到的值带px 正则匹配替换
|
||||||
|
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
|
||||||
|
if (sty.left.includes('%')) {
|
||||||
|
styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100) + binding.value.x;
|
||||||
|
styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100) + binding.value.y;
|
||||||
|
} else {
|
||||||
|
styL = +sty.left.replace(/\px/g, '') + binding.value.x;
|
||||||
|
styT = +sty.top.replace(/\px/g, '') + binding.value.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 鼠标拖拽事件
|
||||||
|
function touchmove(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
// 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)
|
||||||
|
const l = e.touches[0].clientX - disX;
|
||||||
|
const t = e.touches[0].clientY - disY;
|
||||||
|
let finallyL = l + styL;
|
||||||
|
let finallyT = t + styT;
|
||||||
|
// 边界值判定 注意clientWidth scrollWidth区别 要减去之前的top left值
|
||||||
|
if (finallyL < 0) {//// 左边
|
||||||
|
finallyL = 0
|
||||||
|
} else if (finallyL > document.body.clientWidth - dragDom.clientWidth) {///右边
|
||||||
|
finallyL = document.body.clientWidth - dragDom.clientWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
if (finallyT < 0) {////顶部
|
||||||
|
finallyT = 0
|
||||||
|
} else if (finallyT > document.body.clientHeight - dragDom.clientHeight) (///底部
|
||||||
|
finallyT = document.body.clientHeight - dragDom.clientHeight
|
||||||
|
)
|
||||||
|
dragDom.style.transform = "translate(" + finallyL + "px," + finallyT + "px)";
|
||||||
|
//将此时的位置传出去
|
||||||
|
binding.value.x = finallyL;
|
||||||
|
binding.value.y = finallyT;
|
||||||
|
}
|
||||||
|
// 鼠标按下事件
|
||||||
dialogHeaderEl.onmousedown = (e) => {
|
dialogHeaderEl.onmousedown = (e) => {
|
||||||
// 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
|
// 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
|
||||||
const disX = e.clientX - dialogHeaderEl.offsetLeft + 81;
|
const disX = e.clientX - dialogHeaderEl.offsetLeft + 81;
|
||||||
|
|||||||
@ -979,6 +979,11 @@
|
|||||||
this.videoPreviewRow = row
|
this.videoPreviewRow = row
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (row.contentType.indexOf('audio') > -1) {
|
||||||
|
// 音频文件
|
||||||
|
Bus.$emit('onAddAudio', row, this.audioCoverUrl)
|
||||||
|
return
|
||||||
|
}
|
||||||
// 通用打开文件的方法
|
// 通用打开文件的方法
|
||||||
fileConfig.preview(this.$store.state.user.name, row, this.$store.getters.token)
|
fileConfig.preview(this.$store.state.user.name, row, this.$store.getters.token)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user