所以我刚刚完成了一个编码训练营,我仍然是Javascript的新手。我有问题找到一个解决方案来创建动态代码。基本上,我有一个电子邮件图标下的每个员工的团队,当在图标上徘徊,我想要它显示他们的电子邮件。我可以硬编码,但我们有多个团队页面,其中有不同数量的员工。
<div class="member">
<img class="member-img" src="/assets/images/signage/example.png" alt="">
<h5 class="member-details">example</h5>
<img onmouseover="showEmail()" onmouseleave="hideEmail()" class="email-icon" id="emailIcon2" src="/assets/images/email-asset-128-fix.png" alt="">
<h5 class="email-txt" id="emailTxt">example@email.com</h5>
</div>
具体来说,在这个页面上,我为每个团队成员准备了另外3个这样的div。我已经用下面的代码把icon和Email文本放到数组中。
const allIcons = [];
$('.email-icon').each(function() {
allIcons.push(this);
});
console.log(allIcons);
const allEmails = [];
$('.email-txt').each(function() {
allEmails.push(this);
})
console.log(allEmails);
更新到Javascript我正在努力弄清楚我应该在这里做什么,我在网上找不到类似的解决方案。我希望当我把鼠标悬停在图标1上时它会显示Email 1等等,onmouseleave也是一样我只是想再次隐藏h5。我的电子邮件文本的css如下:
.email-txt {
color: #474747;
margin: 0;
padding: 3px;
transform: translateY(-260%);
border-style: solid;
border-radius: 5px;
border-color: #474747;
background-color: darkgray;
color: black;
display: none;
}
我已经尝试过这个解决方案改变图标的颜色时,悬停在相邻的文本与jQuery
我不知道是我做得不对还是怎么了,就是不能让它工作。
请随意评判我的代码,建议越多越好:)。谢谢!
假设电子邮件地址在一个数组中,您所需要做的就是生成一个新图像,并将其title
属性设置为每个数组条目的电子邮件地址:
["1@2.com", "3@4.com", "4@5.com", "5@6.com"].forEach(function(item){
let link = document.createElement("a"); // Create dynamic anchor
link.href = "mailto:" + item; // Set link to go to array item
let img = document.createElement("img"); // Create dynamic image
img.alt = item; // Set the required alt attribute
img.src = "https://illustoon.com/photo/dl/2751.png"; // Set image source
img.title = item; // Set the tooltip for the image to the array item
link.append(img); // Put the image in the anchor
document.body.append(link); // Put the anchor on the page
});
img { width: 30px; }
<p>Hover over each icon to see the email address
指出:
不要将HTML元素存储在数组中——它们已经在DOM中了,所以没有理由维护它们的第二个列表。只需将要处理的数据存储在数组中。
不要使用标题(<h1>
…<h6>
),因为如何文本样式的浏览器。标题用于定义文档结构,对于使用辅助技术(如屏幕阅读器)浏览网页的人来说是必不可少的。<h5>
只用于细分现有的<h4>
部分。<h4>
只能用于细分<h3>
部分,依此类推。
你在你的代码中使用JQuery。虽然JQuery本身没有什么问题,但它被广泛滥用于解决简单的编码场景。这里的情况非常简单,确实不需要使用JQuery。在学习JavaScript库和框架之前,先学习JavaScript。
你可以使用CSS来处理悬停效果,在可能的情况下,CSS比JS更适合处理这些场景:
const employees = [{
email: "member1@email.com",
img: "👮"
}, {
email: "member2@email.com",
img: "👷"
}, {
email: "member3@email.com",
img: "💂"
}, {
email: "member4@email.com",
img: "🕵"
}]
employees.forEach(d => {
const html = ` <div class="member">
<div class="member-img">${d.img} </>
<h5 class="member-details">${d.email.match(/.*(?=@)/)}</h5>
<div class="email-icon">✉️<h5 class="email-txt" id="emailTxt">${d.email}</h5></div>
</div>`
root.innerHTML += html
})
#root {
display: flex;
justify-content: center;
}
.member {
display: flex;
flex-direction: column;
align-items: center;
}
.email-icon {
position: relative;
font-size: 3rem;
cursor: pointer;
}
.email-txt {
display: none;
position: absolute;
top: 0;
left: 0;
transform: translateX(-50%);
}
.email-icon:hover .email-txt {
display: block;
}
<div id="root"></div>