UNPKG

@wfrog/vc

Version:

`自用` 的基于 `element-plus` 二次封装的 `vue3` 组件库。追求在业务场景中,尽可能使用更少的代码量来实现需求。 因此在组件封装上,以 `方便` 为主,打包仅 `esm` 模式。

194 lines (188 loc) 7.09 kB
import './index.css' // vue-script:D:\project\_my\vc\src\components\single-player\index.vue?type=script import { defineComponent as _defineComponent2 } from "vue"; import { unref as _unref, normalizeStyle as _normalizeStyle, createVNode as _createVNode, normalizeClass as _normalizeClass2, createElementVNode as _createElementVNode, openBlock as _openBlock2, createElementBlock as _createElementBlock2, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from "vue"; import { computed, nextTick, onMounted as onMounted2, ref, watch } from "vue"; import { ElSlider } from "element-plus"; import { isBoolean } from "lodash-es"; // vue-script:D:\project\_my\vc\src\components\awesome-icon\index.vue?type=script import { defineComponent as _defineComponent } from "vue"; import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"; import { onMounted } from "vue"; import { defaultWindow, loader } from "@wfrog/utils"; var awesome_icon_default = /* @__PURE__ */ _defineComponent({ __name: "index", props: { name: { type: String, default: "" }, mode: { type: String, default: "css" } }, setup(__props) { const props = __props; const loaderSource = async () => { const cdn = props.mode === "svg" ? "fontawesomeJs" : "fontawesomeCss"; await loader.loadCdnSingle(cdn); }; onMounted(() => { if (defaultWindow) { if (!defaultWindow.ElementPlusComponents?.isAwesomeIconLock) { defaultWindow.ElementPlusComponents = { ...defaultWindow.ElementPlusComponents, isAwesomeIconLock: true }; loaderSource(); } } }); return (_ctx, _cache) => { return _openBlock(), _createElementBlock("i", { class: _normalizeClass(["awesome-icon", props.name]) }, null, 2); }; } }); // src/components/awesome-icon/index.vue var awesome_icon_default2 = awesome_icon_default; // vue-script:D:\project\_my\vc\src\components\single-player\index.vue?type=script var _hoisted_1 = ["src"]; var single_player_default = /* @__PURE__ */ _defineComponent2({ __name: "index", props: { src: { type: String, default: "" }, width: { type: Number, default: 300 } }, emits: ["error", "timeupdate"], setup(__props, { emit: emits }) { const props = __props; const DEFAULT_VOLUME = 50; const myAudio = ref(); const volume = ref(DEFAULT_VOLUME); const duration = ref(100); const currentTime = ref(0); const isDraging = ref(false); const isPlaying = ref(false); const myStyle = computed(() => ({ width: `${props.width}px` })); const sliderStyle = computed(() => ({ width: `${props.width - 80}px` })); const src = computed(() => props.src); const playClass = computed(() => ({ "fa-play": !isPlaying.value, "fa-pause": isPlaying.value })); const volumeIcon = computed(() => { if (volume.value === 0) { return "fa-volume-mute"; } if (volume.value > 70) { return "fa-volume-up"; } return "fa-volume-down"; }); watch(volume, (val) => { if (myAudio.value) { myAudio.value.volume = val / 100; } }); watch(src, () => { nextTick(() => { myAudio.value && myAudio.value.play(); }); }); onMounted2(() => { if (!myAudio.value) { return; } const audio = myAudio.value; audio.onplay = () => { audio.volume = volume.value / 100; isPlaying.value = true; }; audio.onpause = () => { isPlaying.value = false; }; audio.ontimeupdate = () => { if (!isDraging.value) { currentTime.value = Math.floor(audio.currentTime); emits("timeupdate", currentTime.value); } }; audio.onprogress = () => { duration.value = Math.floor(audio.duration); }; audio.onerror = (e) => { if (!props.src) { return; } emits("error", e); }; }); const handleTimeChange = (val) => { if (myAudio.value) { myAudio.value.currentTime = Math.floor(val); } }; const setDraging = (status) => { isDraging.value = status; }; const toggleVolume = () => { volume.value = volume.value > 0 ? 0 : DEFAULT_VOLUME; }; const togglePlay = (play) => { if (!myAudio.value || !src.value) { return; } if (isBoolean(play)) { play ? myAudio.value.play() : myAudio.value.pause(); return; } isPlaying.value ? myAudio.value.pause() : myAudio.value.play(); }; return (_ctx, _cache) => { return _openBlock2(), _createElementBlock2("div", { class: _normalizeClass2(_ctx.$style.main), style: _normalizeStyle(_unref(myStyle)) }, [ _createVNode(_unref(ElSlider), { modelValue: currentTime.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => currentTime.value = $event), max: duration.value, style: _normalizeStyle(_unref(sliderStyle)), "show-tooltip": false, onChange: handleTimeChange, onMouseedown: _cache[1] || (_cache[1] = ($event) => setDraging(true)), onMouseup: _cache[2] || (_cache[2] = ($event) => setDraging(false)) }, null, 8, ["modelValue", "max", "style"]), _createElementVNode("div", { class: _normalizeClass2(_ctx.$style["volume-container"]) }, [ _createVNode(_unref(ElSlider), { modelValue: volume.value, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => volume.value = $event), vertical: "", height: "100px", "show-tooltip": false, class: _normalizeClass2(_ctx.$style.volume) }, null, 8, ["modelValue", "class"]), _createVNode(awesome_icon_default2, { name: "fas", class: _normalizeClass2([_ctx.$style["volume-controll"], _unref(volumeIcon)]), onClick: toggleVolume }, null, 8, ["class"]) ], 2), _createVNode(awesome_icon_default2, { name: "fas", class: _normalizeClass2([_ctx.$style.play, _unref(playClass)]), onClick: togglePlay }, null, 8, ["class"]), _createElementVNode("audio", { ref_key: "myAudio", ref: myAudio, src: _unref(src), loop: "" }, null, 8, _hoisted_1) ], 6); }; } }); // vue-style:D:\project\_my\vc\src\components\single-player\index.vue?type=style&index=0&isModule=true&isNameImport=true var single_player_default2 = { main: "_main_16n2t_1", volume: "_volume_16n2t_15", "volume-container": "_volume-container_16n2t_25", "volume-controll": "_volume-controll_16n2t_38", play: "_play_16n2t_42" }; // src/components/single-player/index.vue var cssModules = {}; single_player_default.__cssModules = cssModules = {}; cssModules["$style"] = single_player_default2; var single_player_default3 = single_player_default; export { single_player_default3 as default };