【问题标题】:Each song in an Audio Player can change the Background's Color音频播放器中的每首歌曲都可以更改背景颜色
【发布时间】:2016-01-09 12:49:11
【问题描述】:

我想知道以下是否可行:

我有一个带有音频播放器的页面。每当一首歌自动改变或有人点击曲目列表中的一首歌时,我想让这首歌改变背景的颜色。背景是渐变动画。

  1. 例如,Song 01 将有一个类 "sad," 并将背景更改为更深的颜色;
  2. Song 02 将是 “happy”, 并将用更亮的颜色改变背景。

我会有很多不同的调色板,但我也想为歌曲分配一个特定的调色板(不是随机化的)。

到目前为止,下面的例子就是我所拥有的。在这个 JSFiddle 演示中,我可以在点击时更改背景,但不幸的是,当一首歌曲结束并自动播放下一首歌曲时,它不起作用。

http://jsfiddle.net/georgeyanakiev/ca9pmv4L/3/

<a href="#" onclick="bgFrame.className='happy'" data-src="SONG URL">SONG TITLE</a>

.happy { background: linear-gradient(270deg, #3e23ff, #3cff3c, #ff1962, #2dafe6); background-size: 600% 600%; -webkit-animation: Gradient 60s ease infinite; -moz-animation: Gradient 60s ease infinite; animation: Gradient 60s ease infinite; }

我将不胜感激一些帮助和建议!

亲切的问候。

【问题讨论】:

    标签: jquery html css audio background


    【解决方案1】:

    您需要在 JavaScript 中执行此操作,因为我们需要找出当前歌曲何时更改以及何时发生更改,我们需要执行与您的 onclick="bgFrame.className='happy'" 等效的操作

    您可以通过执行以下操作来实现:

    var audio = document.getElementsByTagName('audio')[0];
    var bgFrame = document.getElementById('bgFrame');
    
    audio.addEventListener('ended', function(e){
        var playing = document.querySelector('li.playing');
        var playingSong = playing.querySelector('a');
        eval(playingSong.getAttribute('onclick'));
    });
    

    我们正在添加一个事件监听器,它检查当前歌曲何时为ended,当它被触发时,它会执行以下操作:

    1. 查找正在播放列表项。
    2. 在该列表项中找到 a 标记。
    3. 找到a 标记的onclick 属性,然后在本质上运行该代码的对象上调用eval 并获得效果。

    这里更新jsFiddle

    【讨论】:

    • 谢谢你,帕特尔!你是我的英雄。还有一个问题:是否可以在背景颜色变化之间进行平滑的淡入淡出过渡?
    • 我认为,如果您在 css 类中设置了 linear-gradient,则不对代码进行基本更改是不可能的。事实上,如果你愿意使用 jQuery,你可以让它变得更简单直接。
    • 太好了,如果需要,我会使用 jQuery。非常感谢!
    • 我很高兴能帮上忙。那么您可能想考虑投票和accepting the answer? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多