удалить кнопку при нажатии и изменить цвет фона - PullRequest
0 голосов
/ 31 марта 2020

Хочу сделать сайт с рецептами. И я хочу, чтобы люди могли любить рецепты. Когда им нравится, я хочу, чтобы цвет фона изменился, а кнопка «любимый» исчезла.

Я понял, как изменить цвет фона, когда они щелкают по классу .article.

Но как мне изменить цвет фона и скрыть кнопку, когда я нажимаю на нее?

Спасибо!

const container = document.querySelector("#container")
window.addEventListener("load", showLoadedFavorites)
container.addEventListener("click", clickHandler)

function clickHandler(e){
    let item = e.target

    if (item.classList.contains("article")) {
        let saveditems = getLocalFavorites()
        let index = saveditems.indexOf(item.id)
        console.log(index)

        if(index > -1){
            item.classList.remove('favorite')
            saveditems.splice(index, 1)
        } else {
            item.classList.add("favorite")
            saveditems.push(item.id)
        }
        localStorage.setItem('favorites', JSON.stringify(saveditems))
    }
}

function showLoadedFavorites(){
    let saveditems = getLocalFavorites()
    console.log(saveditems)
    for(let item of saveditems) {
        let card = document.querySelector(`#${item}`) 
        card.classList.add("favorite")
    }
}

function getLocalFavorites(){
    let favorites = localStorage.getItem("favorites")
    if(favorites) {
        console.log(favorites)
        return JSON.parse(favorites)
    } else {
        console.log("No favorites yet")
        return []
    }
}
body {
    background-color: white;
    font-family: 'Poppins', sans-serif;
    font-size:1.1em;
}

.header {
    font-size: 40px;
    display: grid;
    margin-bottom: 40px;
    text-align: center;
    color: #F17647;

}

#container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-auto-rows: max-content;
    grid-column-gap: 10px;
    grid-row-gap: 10px;
}

.article {
    background-color:white;
    padding:10px;    
    min-height:100px;
    cursor: pointer;
}

.favorite {
    background-color: yellow;
    background-image:url("star.png");
    background-repeat: no-repeat;
    background-position: top right;
}

.picture {
    background-image: url("meal.jpg");
    height:200px;
    background-repeat:no-repeat;
    background-size:cover;
    background-position: center;

}

.btn-favo, .btn-detail {
    background-color: #F17647;
    color: white;
    text-align: center;
    height: auto;
    font-size: 25px;
    margin-top: 10px;
    padding: 10px;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://fonts.googleapis.com/css?family=Poppins&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
    <title>Favorites</title>
</head>
<body>
    <div class="header">Food Magazine</div>


    <div id="container">
        <div class="article" id="article0">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article1">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article2">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article3">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article4">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article5">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article6">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article7">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
        <div class="article" id="article8">
            <div class="picture"></div>
            <div class="btn-favo">Favorite</div>
            <div class="btn-detail">Detail</div>
        </div>
    </div>
    <script src="main.js"></script>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Вам нужно добавить кнопку «Избранный» и дать обеим кнопкам ID

<div class="article" id="article0">
    <div class="picture"></div>
    <div class="btn-favo" id="article0fav">Favorite</div>
    <div class="btn-unfav" id="article0unfav">Unfavorite</div>
    <div class="btn-detail">Detail</div>
</div>

Затем установить скрытое состояние по умолчанию для избранного

.btn-unfav{
    display:none;
}

И использовать JavaScript для переключения свойство дисплея «Избранных» блокировать при установке для свойства «Избранное» значения «Нет»

document.getElementById("article0fav").style.display = "none";
document.getElementById("article0unfav").style.display = "block";

Вы можете добиться того же, используя JQuery

$('#article0fav').hide();
$('#article0unfav').show();

Для того, чтобы jquery работал поместите это в HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

Примечание ** Функция 1018 * - JQuery .show() будет устанавливать только отображаемое значение на block , если вы хотите использовать что-то отличное от display:block, скажем, inline-block, вам придется сделать это с помощью функции .css(), подобной этой $('#article0unfav').css("display","inline-block");

0 голосов
/ 31 марта 2020

Вы можете определить новый класс .hide { display: none } и его элементу по клику. С методом element.classList.add('hide')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...