javascript - 用纯 JavaScript 写出一个 Like 按钮功能
问题描述
所以我想在JS中写一个类似按钮功能的函数。以下是我到目前为止所拥有的。下面我尝试在我的 getSneakers() 函数中插入我的功能,因为我希望在所有单个运动鞋上显示类似按钮功能。
function getSneakers() {
fetch(endPoint)
.then(response => response.json())
.then(sneakers => {
const mappedSneakers = sneakers.data.map( e => e)
mappedSneakers.sort( (a, b) => {
if ( a.attributes.name < b.attributes.name ){
return -1;
}
if ( a.attributes.name > b.attributes.name ){
return 1;
}
return 0;
})
console.log(`sneakers.data are equal? ${sneakers.data == mappedSneakers}`)
mappedSneakers.forEach(sneaker => {
let newSneaker = new Sneaker(sneaker, sneaker.attributes)
let sneakerContainer = document.querySelector('#sneaker-container')
const likeButton = function myLike(x) {
x.classList.toggle("fa-thumbs-down");
}
sneakerContainer.addEventListener("click", likeButton);
sneakerContainer.innerHTML += newSneaker.renderSneakerCard();
})
})
}
有问题的代码行是:
const likeButton = function myLike(x) {
x.classList.toggle("fa-thumbs-down");
}
我还认为我应该添加我想在我的 renderSneakerCard() 中显示的图标。以下是我目前拥有的。
renderSneakerCard() {
return `
<div class="col-md-4">
<div class="card mb-4 shadow-sm">
<img src=${this.imageUrl} class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">${this.name}</h5>
<p class="card-text">${this.description}</p>
<i onclick="myLike(this)" class="fa fa-thumbs-up"></i>
<div class="d-flex justify-content-between align-items-center">
<div class="btn-group">
<button data-id=${this.id} id="edit" data-action="edit" data-name="${this.name}" data-description="${this.description}" data-image_url="${this.imageUrl}" data-category="${this.category}" type="button" class="btn btn-primary">Edit</button>
<button data-id=${this.id} id="delete" data-action="delete" data-name="${this.name}" data-description="${this.description}" data-image_url="${this.imageUrl}" data-category="${this.category}"type="button" class="btn btn-primary">Delete</button>
</div>
<small class="text-muted">Category: ${this.category.name}</small>
</div>
</div>
</div>
</div>
`
}
请让我知道我的方法是否不正确,以及您是否也可以提供任何文件。谢谢!
解决方案
这应该会有所帮助:https ://codepen.io/enukeron/pen/qBaZNbb 我昨天做了,如果您有更多问题,请不要犹豫。我认为您的功能可以很容易地适应我的代码。
需要放代码加个链接,不过codepen会比较好用
if( heart.classList.contains("liked")){
heart.innerHTML='<i class="fa fa-heart-o" aria-hidden="true"></i>';
heart.classList.remove("liked");
/*Removes 1 like */
var value = parseInt(photoLikes.value, 10);
value = isNaN(value) ? 0 : value;
value--;
photoLikes.value = value;
}
else{
heart.innerHTML='<i class="fa fa-heart" aria-hidden="true"></i>';
heart.classList.add("liked");
/*adds 1 like */
var value = parseInt(photoLikes.value, 10);
value = isNaN(value) ? 0 : value;
value++;
photoLikes.value = value;
}
});
推荐阅读
- python - 如何在 for 循环中附加一组 numpy 数组?
- progressive-web-apps - PWA:防止 url 在 PWA 中打开
- python - 如何在熊猫中自动旋转数据
- rust - 如何在 rust 中定义可以包含任何原始数据类型的数组或向量?
- python - DM提到了不和谐的用户
- r - 在 group_by 子句中创建具有列名的函数
- python - 为什么我观察到求和的直接(手动)与循环评估之间的差异?
- reactjs - 用打字稿反应情节js
- python - Kivy - 使用更新的内容重建类/ Boxlayout
- javascript - 来自 C# 中 Javascript 的 BigInt 等价物