Как заставить крутиться картинку по клику
Ребят, помогите пожалуйста, совсем не силён в JS.
Есть сайт ССЫЛКА нужно сделать так чтобы при нажатии на фотку трека (она же кнопка Play), эта фотка у этого трека начинала крутиться по часовой стрелке, при нажатии ещё раз (ставится на Pause) перестаёт крутиться (Желательно бы чтобы принимала исходное положение, но это по возможности и не так важно). Что не пробовал делать, крутится только одна первая картинка..уже час вожусь голова поехала( |
<style>
img {
display: inline-block;
width: 60px;
height: 60px;
background: gray;
border-radius: 50%;
}
.play-button--playing img {
animation: spin 4s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
</style>
<script>
document.addEventListener("DOMContentLoaded", () => {
const buttons = document.querySelectorAll(".play-button");
const NOW_PLAYING_CLASS_NAME = "play-button--playing";
buttons.forEach(node => {
node.addEventListener("click", e => {
e.preventDefault();
const isNowPlaying = node.classList.contains(NOW_PLAYING_CLASS_NAME);
buttons.forEach(button => {
button.classList.toggle(NOW_PLAYING_CLASS_NAME, !isNowPlaying && node === button);
});
});
});
});
</script>
<a href="#" class="play-button"><img src="" alt="img-1"></a>
<a href="#" class="play-button"><img src="" alt="img-2"></a>
<a href="#" class="play-button"><img src="" alt="img-3"></a>
|
Ну разные варианты я находил на просторах интернета..так то всё понятно когда по чистому..а вот к своему сайту не могу примерить..Пытался ваш пример под себя подстроить, абракадабра получилась со всеми картинками на сайте ну и ничего не вращалось(
|
Цитата:
|
Не на ту ссылку (тег a) класс play-button повесили.
Скрипт достаточно вставить на страницу 1 раз, а не по экземпляру на каждую кнопку. |
Цитата:
|
Цитата:
<!-- Трек №{news-id} -->
<div class="wmbox_home"><span class="cifra">{post-custom-id}</span>
<div class="ti">
<a href="javascript:ShowOrHide('prosl-{news-id}')"><img src="https://****"/>
<a id="Player{news-id}" class="iplay" data-player="https://***" data-title="{title}" data-reads="https://***/down.php?id={news-id}" data-id="{news-id}" data-idn="play{news-id}" data-nextplay="true"></a>
</div>
<ul class="ti">
<li><h1 class="heading"><strong> [full-link] {title}[/full-link]</strong></h1></li>
<li>Добавлено: {date}</li>
</ul>
</a>
</div>
<!-- Конец трека №{news-id} --
А сам файл 1 выводится в файле 2 в кратце вот так
<div class="outer_stata">
<div class="middle_stata">
<div class="inner_stata">
{content}
</div>
</div>
</div>
получается как бы файл 1 это один трек |
Puzzle, дело не в том, что "за бесплатно никто не помогает", а в том, что вам показали рабочий код, который решает вашу проблему.
Вам осталось только разместить код на своей странице и добавить нужной ссылке в разметке класс `play-button`, всё. В прошлый раз когда я смотрел, вы этот класс добавили не той кнопке. У вас, какого-то фига, на каждый элемент идет по 2 ссылке: одна с картинкой внутри; другая, видимо, для воспроизведения аудио. Для начала поправьте ваш html-код, потому что сейчас он содержит ошибку:
<!-- Трек №{news-id} -->
<div class="wmbox_home"><span class="cifra">{post-custom-id}</span>
<div class="ti">
*!*
<a href="javascript:ShowOrHide('prosl-{news-id}')">
*/!*
<img src="https://****" />
<a
id="Player{news-id}"
class="iplay"
data-player="https://***"
data-title="{title}"
data-reads="https://***/down.php?id={news-id}"
data-id="{news-id}"
data-idn="play{news-id}"
data-nextplay="true"
></a>
</div>
<ul class="ti">
<li>
<h1 class="heading"><strong> [full-link] {title}[/full-link]</strong></h1>
</li>
<li>Добавлено: {date}</li>
</ul>
*!*
</a>
*/!*
</div>
<!-- Конец трека №{news-id} --
Как разберетесь с ошибками, уберете лишнее, может быть придете к чему-то похожему:
<!-- Трек №{news-id} -->
<div class="wmbox_home"><span class="cifra">{post-custom-id}</span>
<div class="ti">
<a
id="Player{news-id}"
class="iplay *!*play-button*/!*"
data-player="https://***"
data-title="{title}"
data-reads="https://***/down.php?id={news-id}"
data-id="{news-id}"
data-idn="play{news-id}"
data-nextplay="true"
>
<img src="https://****" />
</a>
</div>
<div class="ti">
<div>
<h1 class="heading"><strong>[full-link]{title}[/full-link]</strong></h1>
</div>
<div>Добавлено: {date}</li>
</div>
</div>
<!-- Конец трека №{news-id} --
|
Puzzle, если у вас так ничего и не выйдет и вы по прежнему будете готовы заплатить за работу, то создайте новый топик в разделе "Работа".
|
Ну крутиться то картинку по вашему методу я смог ещё изначально..проблема в том, что если делать чтобы картинка крутилась вашим методом, то у меня пропадают png кнопки плей и пауза которые поверх обложки трека и крутится картинка только при обновлении страницы.А при работе AJAX перестаёт..к примеру крутится у одного трека картинка, перехожу к другому треку и там уже не крутится..вот к примеру тут посмотрите ССЫЛКА а должно быть как на главной, при наведении на обложку появляется картинка прозрачная Play при нажатии трек играет и светится прозраным Pause..пока эксперементирую с крутящейся обложкой отдельно для трека одного
|
<style>
img {
display: inline-block;
width: 60px;
height: 60px;
background: gray;
}
.play-button {
position: relative;
display: inline-block;
border-radius: 50%;
overflow: hidden;
}
.play-button:hover:before,
.play-button:hover:after,
.play-button.play-button--playing:before,
.play-button.play-button--playing:after {
content: '';
background: #000;
opacity: .3;
position: absolute;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
.play-button:hover:after,
.play-button.play-button--playing:after {
background: url('https://beatbass.ru/design/images/ms.png');
background-size: cover;
}
.play-button.play-button--playing:after {
background: url('https://beatbass.ru/design/images/ms_2.png');
background-size: cover;
}
.play-button--playing img {
animation: spin 4s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
</style>
<script>
document.addEventListener("DOMContentLoaded", () => {
const buttons = document.querySelectorAll(".play-button");
const NOW_PLAYING_CLASS_NAME = "play-button--playing";
buttons.forEach(node => {
node.addEventListener("click", e => {
e.preventDefault();
const isNowPlaying = node.classList.contains(NOW_PLAYING_CLASS_NAME);
buttons.forEach(button => {
button.classList.toggle(NOW_PLAYING_CLASS_NAME, !isNowPlaying && node === button);
});
});
});
});
</script>
<a href="#" class="play-button"><img src="" alt="img-1"></a>
<a href="#" class="play-button"><img src="" alt="img-2"></a>
<a href="#" class="play-button"><img src="" alt="img-3"></a>
|
CSS-анимация через классы выглядит очень аккуратно. :) Если кому-то нужно проще, можно просто через JS менять transform: rotate() при клике - будет работать без лишних классов и с любым количеством картинок.
|
| Часовой пояс GMT +3, время: 16:47. |