0.0.1 • Published 9 months ago

dongad-danmaku v0.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

@Dongad/Danmaku

一个简洁的弹幕动画组件,不提供太多配置,只提供最基础的功能。

示例

<template>
  <div style="display: flex; flex-direction: column; align-items: center">
    <Danmaku
      ref="danma"
      :paused="paused"
      style="
        width: 600px;
        height: 450px;
        background-color: black;
        resize: both;
        overflow: hidden;
      ">
      <template #="danmakuItem">
        <div
          @mouseenter="toggleItemPaused(danmakuItem)"
          @mouseleave="toggleItemPaused(danmakuItem)"
          style="cursor: pointer">
          {{ danmakuItem.text }}
        </div>
      </template>
    </Danmaku>
    <div class="danma-controls">
      <select v-model="danmaItem.type">
        <option value="move">move</option>
        <option value="top">top</option>
        <option value="bottom">bottom</option>
      </select>
      <input type="color" v-model="danmaItem.color" />
      <input v-model="danmaItem.text" />
      <button @click="draw">发送</button>
      <button @click="togglePaused">{{ paused ? "播放" : "暂停" }}</button>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { ref } from "vue";
import Danmaku from "dongad-danmaku";
import type { DanmakuItem } from "dongad-danmaku";

const danma = ref<InstanceType<typeof Danmaku>>();

const paused = ref(false);
const togglePaused = () => {
  paused.value = !paused.value;
};
const toggleItemPaused = (da: DanmakuItem) => {
  if (!da.$el) return;
  if (da.$el.style.animationPlayState === "paused") {
    da.$el.style.animationPlayState = "running";
  } else {
    da.$el.style.animationPlayState = "paused";
  }
};

const danmaItem = ref<DanmakuItem>({
  text: "",
  type: "move",
  color: "#ffffff",
});
const draw = () => {
  const item = { ...danmaItem.value };
  danma.value?.draw([item]);
};
</script>

<style scoped>
.danma-controls {
  margin-top: 10px;
  display: flex;
  gap: 10px;
  align-items: center;
}

.danma-controls > * {
  display: block;
  height: 24px;
  box-sizing: border-box;
  border-radius: 4px;
  border: 1px solid grey;
}

button {
  background-color: #0078d4;
  color: white;
}
</style>

API

Props

属性类型默认值说明
pausedbooleanfalse控制弹幕是否暂停
allowOverlapbooleanfalse控制是否允许弹幕重叠
lineHeightnumber24弹幕轨道高度
horizontalSpacingnumber20弹幕横向间距
visibleobject-弹幕可见性配置

visible 对象

属性类型默认值说明
topbooleantrue控制顶部弹幕可见性
bottombooleantrue控制底部弹幕可见性
movebooleantrue控制滚动弹幕可见性
colorbooleantrue控制彩色弹幕可见性

Methods

方法名类型说明
draw(danmakuItems: DanmakuItem[]) => void绘制弹幕,参数为弹幕数组

DanmakuItem 类型

属性类型默认值说明
type"top" | "bottom" | "move"-弹幕显示位置
textstring-弹幕内容
colorstring"white"弹幕颜色
sizenumber16字体大小
durationnumber5动画时长(秒)
stylestring-自定义样式
classstring-自定义类名
$widthnumber-弹幕宽度
$speednumber-移动速度
$tunnelIdxnumber-占用轨道索引
$elHTMLElement-弹幕元素 DOM 对象
key: stringany-其他任意属性

Slots 类型

属性参数说明
default(props: DanmakuItem)默认插槽,自定义渲染弹幕元素