Theme层代码实现

Theme层代码实现
只要全局加上一个属性选择器,就搞定了~~~

做成属性选择器

html的代码
<div data-theme="default">
css的代码
[data-theme= 'default' ] .box {background:pink;
}
[data-theme= "cool'] .box{background: blue;
}
[data-theme= 'warm'] .box{background: yellow;}

如何对全局页面产生影响 提升到全局
1,将data-theme="default提升到 html 结构
用js控制变色,在app.vue写上这个代码

import {onMounted} from 'vue'export default {
setup() {
onMounted(() =>{
window.document.documentElement.setAttribute(
"data-theme",
"cool"
);
})}}

2,将样式提升到全局
在theme层上新建三个文件不同颜色 导入到index.scss

引用sass文件编写

/* 默认主题色 */

$theme-default: (

  t-color-primary : (
    color: #FF5777
  ),

  t-shadow : (
    shadow: 0 0 8px #FF5777
  ),

  t-border : (
    border: 1Px solid #FF5777
  )
)

用sass来生成主题色切换

@import "./theme-default.scss";
@import "./theme-cool.scss";
@import "./theme-warm.scss";

$themes: (
  default: $theme-default,
  cool: $theme-cool,
  warm: $theme-warm
);

@mixin themable {
  @each $section, $map in $themes {
    $map: $map !global;
    [data-theme="#{$section}"] & {
      @content;
    }
  }
}

@function themed($key, $color) {
  @return map-get(map-get($map, $key), $color)
};

@mixin t-color-primary($style) {

  // themed() 被循环调用,每次循环其 $map 值不一样
  @include themable {
    #{$style}: themed('t-color-primary', 'color');
  }
}

@mixin t-shadow {

  // themed() 被循环调用,每次循环其 $map 值不一样
  @include themable {
    box-shadow: themed('t-shadow', 'shadow');
  }
}

@mixin t-border {

  // themed() 被循环调用,每次循环其 $map 值不一样
  @include themable {
    border: themed('t-border', 'border');
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用vue-video-player实现Vue3视频播放器可拖动打点评论弹幕的具体代码如下: 1. 安装依赖:首先,你需要在Vue项目中安装vue-video-player库。可以使用npm或者yarn进行安装。 ```bash npm install vue-video-player ``` 2. 引入依赖:在你的Vue组件中,引入并注册vue-video-player库。 ```javascript import VueVideoPlayer from 'vue-video-player'; import 'video.js/dist/video-js.css'; import 'vue-video-player/src/custom-theme.css'; export default { // ... components: { VueVideoPlayer, }, // ... } ``` 3. 创建视频播放器组件:在模板中,添加vue-video-player组件,并绑定视频源。 ```html <template> <div> <video-player ref="videoPlayer" :options="playerOptions"></video-player> </div> </template> ``` 4. 添加弹幕功能:在视频播放器组件中,添加一个弹幕,并使用CSS样式控制其位置和样式。 ```html <template> <div> <video-player ref="videoPlayer" :options="playerOptions"></video-player> <div class="danmu-layer"> <!-- 这里显示弹幕 --> </div> </div> </template> <style scoped> .danmu-layer { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; /* 防止弹幕遮挡视频播放器的交互 */ } </style> ``` 5. 实现弹幕拖动:在组件的方法中,添加鼠标事件监听器,获取用户的操作信息,并改变弹幕的位置。 ```html <template> <div> <video-player ref="videoPlayer" :options="playerOptions"></video-player> <div class="danmu-layer" @mousedown="startDrag" @mousemove="dragging" @mouseup="endDrag"> <!-- 这里显示弹幕 --> </div> </div> </template> <script> export default { // ... data() { return { isDragging: false, dragStartX: 0, dragStartY: 0, danmuLeft: 0, danmuTop: 0, } }, methods: { startDrag(event) { this.isDragging = true; this.dragStartX = event.clientX; this.dragStartY = event.clientY; }, dragging(event) { if (this.isDragging) { const offsetX = event.clientX - this.dragStartX; const offsetY = event.clientY - this.dragStartY; this.danmuLeft += offsetX; this.danmuTop += offsetY; this.dragStartX = event.clientX; this.dragStartY = event.clientY; } }, endDrag() { this.isDragging = false; }, }, // ... } </script> ``` 6. 打点评论功能:添加一个按钮,当用户点击该按钮时,将评论信息添加到指定的时间点上。 ```html <template> <div> <video-player ref="videoPlayer" :options="playerOptions"></video-player> <div class="danmu-layer" @mousedown="startDrag" @mousemove="dragging" @mouseup="endDrag"> <!-- 这里显示弹幕 --> </div> <button @click="addComment">添加评论</button> </div> </template> <script> export default { // ... data() { return { // ... comments: [], } }, methods: { // ... addComment() { const currentTime = this.$refs.videoPlayer.currentTime(); const comment = { time: currentTime, text: '这是一条评论', }; this.comments.push(comment); }, }, // ... } </script> ``` 这是使用vue-video-player实现Vue3视频播放器可拖动打点评论弹幕的基本代码。你可以根据自己的需求进一步完善和定制,例如添加评论显示、弹幕样式等。记得根据实际情况修改代码中的选择器、样式和事件处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值