Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 展厅场景搭建

    • 1. 学前说明、展厅效果
    • 2. Blender查看展厅模型
    • 3. vue3+Vite +threejs
    • 4. 加载展厅gltf模型
    • 5. 发光属性emissive
    • 6. Blender设置发光属性
    • 7. 发光贴图.emissiveMap
    • 8. Blender自发光贴图
    • 9. Blender烘焙光照到贴图
    • 10. Blender烘焙全景图
    • 11. Blender设置环境贴图、涂层
    • 12. gui调试环境贴图
    • 13 .gui调节材质涂层
    • 14. threejs渲染曝光功能
    • 15. 展厅背景音乐
    • 16. 练习题-按钮开关背景音乐
      • 视频作为纹理贴图
      • 18. 色差问题—视频纹理颜色空间
      • 19. 展厅屏幕播放宣传视频
    • 展厅漫游

    • Vue+Threejs展厅
    • 展厅场景搭建
    郭隆邦
    2025-03-24
    目录

    16. 练习题-按钮开关背景音乐

    # 练习题-按钮开关背景音乐

    接着上节课背景音乐讲解,本节课是一个练习题,也不涉及threejs,就是创建一个按钮控制音频的播放与暂停,算是vue普通前端知识,如果你对vue3非常熟悉,可以参考1.16小节代码,自己动手写下,我下面就简单演示下流程。

    # 创建一个vue3按钮组件

    创建一个按钮组件BackgroundAudio.vue,然后引入到HelloWorld.vue文件中

    按钮用到的图片素材放在了assets文件夹下。

    <script setup>
    
    </script>
    
    <template>
        <div id="audio">
            <img src="../assets/关闭声音.png">
        </div>
    </template>
    
    <style scoped>
    #audio {
        position: absolute;
        left: 10px;
        top: 50%;
        padding: 10px 10px;
        background: rgba(0, 0, 0, 0.4);
        border-radius: 22px;
        cursor: pointer;
    }
    
    #audio img {
        width: 24px;
        vertical-align: middle;
    }
    </style>
    
    <script setup>
    import BackgroundAudio from './BackgroundAudio.vue'
    </script>
    <template>
    <BackgroundAudio />
    </template>
    

    # 开关音频

    <script setup>
    import { ref } from 'vue';
    
    const audio = document.createElement('audio')
    audio.loop = true;//循环播放
    audio.src = './背景音乐.wav';//音频文件路径
    
    
    const playBool = ref(false);//播放状态
    //开关音频
    function play() {
        if (playBool.value == true) {
            audio.pause();
            playBool.value = false;
        } else {
            audio.play();
            playBool.value = true;
        }
    }
    </script>
    
    <template>
        <div id="audio" @click="play()">
            <img v-show="playBool" src="../assets/打开声音.png">
            <img v-show="!playBool" src="../assets/关闭声音.png">
        </div>
    </template>
    

    # 鼠标事件+按钮:控制音频

    鼠标事件、按钮可以同时控制音频的播放暂停,只是需要注意两者的交互逻辑不要冲突即可。

    如果UI按钮参与了一次控制音频播放或暂停,后面鼠标点击canvas画布区域,不在触发音频播放。

    import { ref } from 'vue';
    
    const buttonBool = ref(false);//按钮是否控制过音频播放或暂停
    const playBool = ref(false);
    
    const audio = document.createElement('audio')
    audio.loop = true;
    audio.src = './背景音乐.wav';
    
    function play() {
        buttonBool.value = true;//标记UI按钮参与了音频控制
        if (playBool.value == true) {
            audio.pause();
            playBool.value = false;
        } else {
            audio.play();
            playBool.value = true;
        }
    }
    
    import twin from './twin';
    // 监听canvas画布
    twin.renderer.domElement.addEventListener('mousedown', () => {
        //如果按钮参与控制播放或暂停,鼠标事件不触发播放
        if (buttonBool.value == false) {
            audio.play();
            playBool.value = true;
        }
    })
    
    15. 展厅背景音乐
    视频作为纹理贴图

    ← 15. 展厅背景音乐 视频作为纹理贴图→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式