javascript - 鼠标悬停循环
问题描述
我有四个图像。当我将鼠标悬停在它们上时,我希望它们中的每一个都播放不同的声音。好吧,我这样做了,但是为每个函数和不同的函数创建了不同的变量。在 HTML 中,我有一个包含图像的容器,然后是另一个<div>
音频。我创建了一个新变量来选择所有图像并循环它们:
var roll = document.querySelectorAll("img");
for (var i=0; i<roll.length; i++){
roll[i].addEventListener("mouseover",function(){
console.log(this);
this.audio.play();
})
}
但是,即使“这个”是它所说的图像:Cannot read property 'play' of undefined
。我对如何将声音与图像联系起来感到困惑。
html 看起来像这样:
<div class="container">
<div class="down music"><img id="batman" src="#"></div>
<div class="up music"><img id="bane" src="#"></div>
<div class="down music"><img id="batman" src="#"></div>
<div class="up music"><img id="batman" src="#"></div>
</div>
<audio id="batman" src="sounds/batman.wav"></audio>
<audio id="bane" src="sounds/ceremony.mp3"></audio>
<audio id="joker" src="sounds/free.wav"></audio>
<audio id="alfred" src="sounds/mud.wav"></audio>
解决方案
您的问题是this
指每个<img>
标签,而不是音频源。这是一个有效的代码笔,它会onMouseOver
提醒相应的 div 的值。(我无法访问音频源,但应该相对容易切换)。以下应该适用于音频标签,当然我没有对此进行测试。
HTML:
<div class="container">
<div class="down music"><img id="monkey" src="https://images.pexels.com/photos/145947/pexels-photo-145947.jpeg?auto=compress&cs=tinysrgb&h=350" height="90"></div>
<div class="up music"><img id="dog" src="https://boygeniusreport.files.wordpress.com/2016/11/puppy-dog.jpg?quality=98&strip=all&w=782" height="90"></div>
<div class="down music"><img id="cat" src="https://www.bluecross.org.uk/sites/default/files/styles/thumbnail_pet/public/pets/149194.jpg?itok=xZLl3maM" height="90"></div>
<div class="up music"><img id="cow" src="https://boygeniusreport.files.wordpress.com/2016/11/puppy-dog.jpg?quality=98&strip=all&w=782" height="90"></div>
</div>
<audio id="audiomonkey" src="#">monkey</audio>
<audio id="audiodog" src="#">dog</audio>
<audio id="audiocat" src="#">cat</audio>
<audio id="audiocow" src="#">cow</audio>
JavaScript:
var roll = document.querySelectorAll("img");
for (var i=0; i<roll.length; i++){
roll[i].addEventListener("mouseover",function(){
var idOfImg = this.id; //gets each id of the img
document.getElementById("audio" + idOfImg).play(); //gets your right sound, based off id
});
}
我们通过获取图片的每个id,this.id
然后获取id前面有audio的对应元素,然后就使用.play()
方法了。
推荐阅读
- d3.js - 数据过滤器适用于 json 数据,但不适用于 csv 数据
- javascript - 从 Angular 中的 Click 事件处理程序获取源元素
- php - 在 Docker 中安装 GD 扩展
- php - 如何在 DateInterval 扩展类中创建 days 属性?
- python - 向数据框中添加新列,显示包含数字的所有行的总和
- python - 如何创建每另一列的前一行为1时增加1的ID
- php - 使用 ip 和掩码获取网络地址。(php, IPv6)
- java - javax.persistence.PersistenceException: org.hibernate.TransactionException: 已经有一个关联的托管连接
- c# - 如何减少代码中的 SQL 查询量?
- php - 是否有一个内置的 PHP 函数可以打印格式化为的数组
标签?