jquery - 单击下一步按钮时如何突出显示当前播放的音频
问题描述
单击“下一个”和“上一个”按钮时,我试图让当前正在播放的音频在播放列表中突出显示,现在它仅在单击音轨时突出显示。
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="working_files/styles.css" title="Default" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" language="javascript" src="working_files/custom.js"></script>
</head>
<body>
<div id="player">
<a href="#" class="audio prev"><span>Prev</span></a>
<audio controls></audio>
<a href="#" class="audio next"><span>Next</span></a>
<br><span class="audio name"></span>
</div>
<div id="list">
<p><a href="#" class="audio play" data-frogsong-id="AmericanToad_Call"><span active>1. American Toad Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="Bullfrog_Call"><span class="sound">2. Bullfrog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="CopesGrayTreefrog_Call"><span class="sound">3. Treefrog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="CricketFrog_Call"><span class="sound">4. Cricket Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="EasternGrayTreefrog_Call"><span class="sound">5. EasternGray Treefrog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="FowlersToad_Call"><span class="sound">6. Fowlers Toad Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="GreenFrog_Call"><span class="sound">7. Green Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="NorthernLeopardFrog_Call"><span class="sound">8. Northern Leopard Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="PickeralFrog_Call"><span class="sound">9. Pickeral Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="PlainsLeopardFrog_Call"><span class="sound">10. Plains Leopard Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="SpringPeeper_Call"><span class="sound">11. Spring Peeper Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="WesternChorusFrog_Call"><span class="sound">12. Western Chorus Frog Call</span></a></p>
<p><a href="#" class="audio play" data-frogsong-id="WoodFrog_Call"><span class="sound">13. Wood Frog Call</span></a></p>
</div>
<script>
$('span').on('click', function() {
$('span').removeClass('active');
$(this).addClass('active');
});
</script>
</body>
</html>
window.Formaweb = window.Formaweb || {};
window.Formaweb.Player = function() {
'use strict';
var audio;
var playlist;
var len;
var current;
init();
function init(){
current = 0;
audio = $('audio')[0];
playlist = [
{name: '1. American Toad Call', path: 'frog_sounds/AmericanToad_Call.mp3', id: 'AmericanToad_Call'},
{name: '2. Bullfrog Call', path: 'frog_sounds/Bullfrog_Call.mp3', id: 'Bullfrog_Call'},
{name: '3. Treefrog Call', path: 'frog_sounds/CopesGrayTreefrog_Call.mp3', id: 'CopesGrayTreefrog_Call'},
{name: '4. Cricket Frog Call', path: 'frog_sounds/CricketFrog_Call.mp3', id: 'CricketFrog_Call'},
{name: '5. EasternGray Treefrog Call', path: 'frog_sounds/EasternGrayTreefrog_Call.mp3', id: 'EasternGrayTreefrog_Call'},
{name: '6. Fowlers Toad Call', path: 'frog_sounds/FowlersToad_Call.mp3', id: 'FowlersToad_Call'},
{name: '7. Green Frog Call', path: 'frog_sounds/GreenFrog_Call.mp3', id: 'GreenFrog_Call'},
{name: '8. Northern Leopard Frog Call', path: 'frog_sounds/NorthernLeopardFrog_Call.mp3', id: 'NorthernLeopardFrog_Call'},
{name: '9. Pickeral Frog Call', path: 'frog_sounds/PickeralFrog_Call.mp3', id: 'PickeralFrog_Call'},
{name: '10. Plains Leopard Frog Call', path: 'frog_sounds/PlainsLeopardFrog_Call.mp3', id: 'PlainsLeopardFrog_Call'},
{name: '11. Spring Peeper Call', path: 'frog_sounds/SpringPeeper_Call.mp3', id: 'SpringPeeper_Call'},
{name: '12. Western Chorus Frog Call', path: 'frog_sounds/WesternChorusFrog_Call.mp3', id: 'WesternChorusFrog_Call'},
{name: '13. Wood Frog Call', path: 'frog_sounds/WoodFrog_Call.mp3', id: 'WoodFrog_Call'},
];
len = playlist.length - 1;
audio.addEventListener('ended', function(e){
run(playlist[0], audio);
next();
});
$('.audio.next').on('click', function(){
next();
run(playlist[current], audio);
return false;
});
$('.audio.prev').on('click', function(){
prev();
run(playlist[current], audio);
return false;
});
$('.audio.play').on('click', function(){
var frogsong_id = $(this).attr('data-frogsong-id');
if(frogsong_id != undefined){
playById(frogsong_id);
}
return false;
});
}
function run(frogsong, player) {
$('.audio.name').text(frogsong.name);
player.src = frogsong.path;
audio.load();
audio.play();
}
function next(){
current++;
if(current > len) current = 0;
}
function prev(){
current--;
if(current < 0) current = 0;
}
function playById(id){
var playlist_id = undefined;
$.each(playlist, function(index, value){
if(value.id == id){
playlist_id = index;
}
});
if(playlist_id != undefined){
current = playlist_id;
run(playlist[current], audio);
}
}
}
$(document).ready(function(){
var player = window.Formaweb.Player();
});
#player {
text-align: center;
background:#e6e6e6;
border: 1px solid;
width: 400px;
padding:10px;
}
#player a {
width: 100px;
font-size: 14px;
padding: 5px;
border: #000 2px solid;
background: #ddd;
cursor: pointer;
color: #000
}
#player span {
margin-top: -10px;
}
audio {
width: 300px;
height: 55px;
}
#list {
width: 422px;
}
#list span {
color: #000000;
font-family: Verdana, Arial, Helvetica;
background: #c1c1c1;
display: block;
border: 1px solid;
padding:5px;
}
#list span.active {
background: #736e69;
}
#list a:hover span {
color: #fff;
text-decoration:none;
}
div p {
margin:0;
}
div a {
text-decoration:none;
}
单击“下一个”和“上一个”按钮时,如何在播放列表中突出显示当前正在播放的音频,我们将不胜感激。非常感谢。
解决方案
使用与 data-frogsong-id 匹配的查询选择器,然后获取子项(这是您想要获取的 span 元素)并将突出显示类放在上面。
$('span').removeClass('active');
$('a[data-frogsong-id=' + playlist[current].id + ']').children().addClass ('active')
您可以将它放在 run 方法中,这样您就不必关心下一个和上一个按钮。
推荐阅读
- typescript - 彻底迭代字符串联合中的所有值?
- javascript - 我的提取请求不断收到错误“字符串与预期的模式不匹配”
- php - 我如何在 MySQL 查询中跳过一个单元格
- image - React Native:底部对齐源高度高于容器的图像
- node.js - 读取从“SELECT COUNT(*) FROM table”返回的对象
- java - 尝试在 Java 应用程序的 Main 中运行 SQL 语句
- python - 过滤后如何将分配的属性保留给查询集对象?备择方案?
- node.js - 在 Node.Js 中像文件一样包装字符串?
- c# - 如何在 XML 文档中查找大于 200 的“CourseCode”值
- javascript - 在 React 中调用 API - item.map 不是函数