• JS案例:拖拽音量调节效果


    用原生js做了一个拖拽调节音量

    效果是这样的:(拖动时音量随两个圆形交集面积增大而增大)

     html部分:

    <!DOCTYPE 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>Document</title>
        <link rel="stylesheet" href="index.css">
    </head>
    
    <body>
        <audio id="audio" autoplay>
            <source src="./1.mp3" type="audio/mpeg">
        </audio>
        <div class="vol left" id="leftBox"></div>
        <div class="vol right" id="rightBox"></div>
        <script src="index.js"></script>
    </body>
    
    </html>

    css部分:

    * {
        margin: 0;
        padding: 0;
    }
    
    body {
        background: rgb(28, 160, 210);
    }
    
    .vol {
         200px;
        height: 200px;
        position: absolute;
        border-radius: 100px;
    }
    
    .left {
        left: 500px;
        top: 100px;
        background: rgb(250, 242, 107);
    }
    
    .right {
        left: 800px;
        top: 100px;
        background: rgba(250, 242, 107, 100);
        z-index: 1;
    }

    js部分:

    var audio;
    init()//入口函数
    
    function init() {
        audio = document.getElementById("audio");//初始化播放器控件
        audio.volume = 0;//将控件音量初始值设置0
        mouseMove(rightBox, document)
    }
    
    function mouseMove(ele, parent) {
        ele.addEventListener('mousedown', moveHandler);//鼠标右击时触发moveHandler方法
        ele.style.position = 'absolute';
        ele.parent = parent;//传递父元素(可省略)
    }
    
    function moveHandler(e) {//moveHandler是个回调函数,鼠标按下,移动,松开都会触发,根据event的type判断事件类型
        if (e.preventDefault) {//取消系统默认事件
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
        if (e.type === 'mousedown') {
            audio.play()//按下时开始播放音乐
            // 下面将被点击的元素及元素在X方向的偏移通过父元素传递(放入内存中)
            this.parent.ele = this;
            this.parent.point = {
                x: e.offsetX
            }
            // 为元素添加鼠标移动和松开事件
            this.parent.addEventListener('mousemove', moveHandler);
            this.addEventListener('mouseup', moveHandler);
        } else if (e.type === 'mousemove') {
            if (rightBox.offsetLeft - leftBox.offsetLeft >= 200 || rightBox.offsetLeft - leftBox.offsetLeft <= -200) {//当被移动元素与另一个元素无交集时,改变样式,使音量为0
                audio.volume = 0;
                document.body.style.background = 'rgb(28,160,210)'
                rightBox.style.background = 'rgba(250, 242, 107, 100)';
            } else {//当被移动元素与另一个元素有交集时,改变样式为渐变,使音量为相交面积的百分比(这里是两圆心之间的距离)
                var count = 1 - Math.abs(rightBox.offsetLeft - leftBox.offsetLeft) / 200;
                audio.volume = count
                document.body.style.background = `rgb(${28+50*count},${160-136*count},${210-133*count})`
                rightBox.style.background = `rgb(${28+50*count},${160-136*count},${210-133*count})`;
            }
            this.ele.style.left = e.x - this.point.x + "px";
        } else if (e.type === 'mouseup') {
            // 鼠标松开时释放内存及事件监听
            this.parent.removeEventListener("mousemove", moveHandler);
            this.parent.ele = null;
            this.parent.point = null;
        }
    }
  • 相关阅读:
    yii---where or该如何使用
    yii---获取当前sql语句
    yii---load怎么使用
    yii---往对象里面添加属性
    js---箭头函数
    yii---判断POST请求
    Atitit USRqc62204 证书管理器标准化规范
    Atitit  深入理解命名空间namespace  java c# php js
    atitit..代码生成流程图 流程图绘制解决方案 java  c#.net  php v2
    Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设
  • 原文地址:https://www.cnblogs.com/HelloWorld-Yu/p/12438918.html
Copyright © 2020-2023  润新知