我的问题如下:
我有四个要素。每个元素都包含一个音频文件,其中打开了自动播放和循环。我想要实现的是:
.o-4
时它可以追溯到.o-1
* {
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
}
.player {
display: flex;
flex-wrap: wrap;
position: relative;
margin: auto;
top: 50vh;
transform: translateY(-50%);
width: 256px;
height: 256px;
background-color: hsla(0, 0%, 80%, 1);
}
.element {
padding: 8px;
width: 128px;
height: 128px;
background-color: hsla(0, 0%, 60%, 1);
}
.o-1 {opacity: 0.2;}
.o-2 {opacity: 0.4;}
.o-3 {opacity: 0.6;}
.o-4 {opacity: 0.8;}
<div class="player">
<div class="element">
<audio autoplay loop>
<source src="blabla-1.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-2.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-3.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-4.mp3" type="audio/mpeg">
</audio>
</div>
</div>
这是demo。
提前致谢!
答案 0 :(得分:1)
这是一个可以在不使用任何类的情况下立即更改opacity
和音量的脚本。
相反,它使用一些data
属性来存储实际的&#34;级别&#34;每个元素的价值。
我没有触摸您的HTML或CSS。 你现在有一个很好的入门脚本可供使用。
// Set a level to each data attribute elements (to start with).
$(".element").each(function(){
$(this).data("opacityLevel","0.8");
$(this).data("volumeLevel","1");
});
// On click, check the level.
$(".element").on("click", function(){
var opacityLevel = parseFloat( $(this).data("opacityLevel") );
console.log("Opacity before: "+opacityLevel);
var volumeLevel = parseFloat( $(this).data("volumeLevel") );
console.log("Volume before: "+volumeLevel);
// Increment it and ensure to stay between 0.2 and 0.8
opacityLevel += 0.2;
if(opacityLevel == 1){
opacityLevel = 0.2;
}
if(opacityLevel >= 0.4){
volumeLevel +=0.3333
}else{
volumeLevel = 0
}
// Store new levels
$(this).data("opacityLevel",opacityLevel);
$(this).data("volumeLevel",volumeLevel);
console.log("Opacity after: "+opacityLevel);
console.log("Volume after: "+volumeLevel);
// Apply the new level to opacity and audio volume.
$(this).css("opacity",opacityLevel);
$(this).find("audio")[0].volume = volumeLevel;
});
&#13;
* {
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
}
.player {
display: flex;
flex-wrap: wrap;
position: relative;
margin: auto;
top: 50vh;
transform: translateY(-50%);
width: 256px;
height: 256px;
background-color: hsla(0, 0%, 80%, 1);
}
.element {
padding: 8px;
width: 128px;
height: 128px;
background-color: hsla(0, 0%, 60%, 1);
}
.o-1 {opacity: 0.2;}
.o-2 {opacity: 0.4;}
.o-3 {opacity: 0.6;}
.o-4 {opacity: 0.8;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="player">
<div class="element">
<audio autoplay loop>
<source src="blabla-1.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-2.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-3.mp3" type="audio/mpeg">
</audio>
</div>
<div class="element">
<audio autoplay loop>
<source src="blabla-4.mp3" type="audio/mpeg">
</audio>
</div>
</div>
&#13;
编辑(关于更顺畅地更改音量的红利问题)
所以这部分会改变:
if(opacityLevel >= 0.4){
volumeLevel +=0.3333
}else{
volumeLevel = 0
}
对此:
var volumeChangeDelay;
if(opacityLevel >= 0.4){
volumeLevel +=0.3333
volumeChangeDelay = 2000; // Slow increase
}else{
volumeLevel = 0;
volumeChangeDelay = 500; // Faster decrease
}
&#34;申请量&#34;将是:
// Apply the new level to opacity and audio volume.
$(this).css("opacity",opacityLevel);
$(this).find("audio").animate({"volume":volumeLevel},volumeChangeDelay);
我在CodePen处理过。
答案 1 :(得分:1)
请在下次提问之前尝试做JS。这不是最好的方法,但花了最少的时间。
https://jsfiddle.net/Ljpb8wk3/2/
您只需要点击即可更改内容。再次,了解这一点。
$(targetDiv).removeClass('o-1').addClass('o-2');
var audioFile = $(targetDiv).find('audio');
audioFile[0].volume=0.4;
使用正确的音频标签选择方法。 https://jsfiddle.net/Ljpb8wk3/4/