js控制audio音量

作者:hu_time
描述:记录一下学习的一个使用原生js控制audio音量的小案例,代码如下:

html:


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>音量控制title>
    <link rel="stylesheet" href="./index.css">
head>
<body>
    <div class="audio-box">
        <audio src="./music-bg.mp3" loop autoplay >audio>
    div>
    <div class="container">
        <p class="title">0p>
        <div class="slide-bar">
            <div class="bar">div>
        div>
        
        <div class="control">
            <div class="center">div>
            <div class="pointer">div>
        div>
        <div class="desc">
            <p>根据按空格键时箭头的指向控制音量p>
            <p>中间:增加5%p>
            <p>其他:大于五十是会减少5%,少于50时会清零p>
        div>
    div>
  
    <script src="./index.js">script>
body>
html>

css:

.title {
    text-align: center;
}

.slide-bar {
    width: 150px;
    height: 15px;
    border: 2px solid #333;
    margin: 0 auto;
    position: relative;
}

.bar{
    position: absolute;
    left: 0;
    height: 100%;
    /* width: 100%; */
    background: red;
}

.control{
    width: 300px;
    height: 15px;
    background: lightblue;
    margin: 15px auto;
}

.center{
    width: 20px;
    height: 100%;
    background: red;
    margin: 0 auto;
}

.pointer{
    width: 20px;
    height: 22px;
    background: url("./pointer.jpg");
    /* 显示时,向左偏移自身宽度的一半 */
    transform: translateX(-50%);
}

.desc{
    margin: 35px 0;
    text-align: center;
}
.audio-box{
    margin: 0 auto;
    text-align: center;
}

js

//音量控制
var volumn = {
    value: 0, //当前音量,表示百分比,0~100
    titleDom: document.querySelector(".title"), //显示音量数字的dom
    barDom: document.querySelector(".bar"), //显示蓝红色条的div
    audioDom: document.querySelector("audio"), //audio元素
    show: function () {
        this.titleDom.innerText = this.value; //音量值
        this.barDom.style.width = this.value + "%";
        this.audioDom.volume = this.value / 100;
    },
    increase: function (val) { //增加指定的音量
        this.value += val;
        if(this.value >= 100){
            this.value = 100 //最大音量
        }
        if(this.value <= 0){
            this.value = 0;  //最小音量
        }
        this.show(); //渲染dom
    },
    clear: function () { //清零
        this.value = 0;
        this.show();
    }
}

//箭头
var pointer = {
    left: 0, //记录当前的marginLeft的值
    pointerDom: document.querySelector(".pointer"),
    maxLeft: 300,   //最大移动值
    startMove: function () { //开始自动左右跑   
        var that = this;
        var step = 2;   //每次移动的值
        setInterval(function () {
            that.left += step;
            if(that.left >= that.maxLeft){
                that.left = that.maxLeft;   //最大移动范围
                step = -step
            }
            if(that.left <= 0){
                that.left = 0;  //最小移动范围
                step = -step;
            }
            that.pointerDom.style.marginLeft = that.left + "px"; //渲染dom
        }, 16)
    },
    isCenter: function () {
        var centerWidth = 30;
        var minLeft = this.maxLeft / 2 - centerWidth / 2; //中间位置的左边
        var maxLeft = this.maxLeft / 2 + centerWidth / 2; //中间位置的右边
        return this.left >= minLeft && this.left <= maxLeft; 
    }
}

volumn.show();
pointer.startMove(); //开始自动移动

// 调用事件
window.onkeydown = function (e) {
    if (e.key === " ") {
        //按下的是空格
        if (pointer.isCenter()) {
            //箭头刚好在中间
            volumn.increase(5);
        }
        else {
            if(volumn.value >= 50){
                volumn.increase(-5);
            }else{
                volumn.clear();
            }
        }
    }
}
// document.querySelector(".jia").onclick = function () {
//     volumn.increase(5);
//     volumn.show();
// }
// document.querySelector(".jian").onclick = function () {
//     volumn.increase(-5);
//     volumn.show();
// }

注:因为是原生js,所以不用引用其他类库,直接复制代码即可复用,

小箭头图片:

在这里插入图片描述
音乐可自行下载并修改路径或者文件名称。

你可能感兴趣的:(学习记录小案例)