Это проблема CSS, а не Javascript. Когда элемент имеет оба класса, более позднее свойство transform
будет иметь приоритет над более ранним, поэтому при применении обоих будут видны только .flip_vertical
* transform: scaleY(-1);
.
Добавление другого Правило CSS для применения масштабного преобразования, когда оба класса активны:
.flip_vertical.flip_horizontal {
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1);
}
Также вы можете использовать classList.toggle
вместо проверки .contains
/ .add
/ .remove
:
const horizontal = document.getElementById('button_horizontal');
const vertical = document.getElementById('button_vertical');
const image = document.getElementById('image');
horizontal.addEventListener('click', function() {
image.classList.toggle("flip_horizontal");
})
vertical.addEventListener('click', function() {
image.classList.toggle("flip_vertical");
})
.flip_horizontal {
-webkit-transform: scaleX(-1);
transform: scaleX(-1);
}
.flip_vertical {
-webkit-transform: scaleY(-1);
transform: scaleY(-1);
}
.flip_vertical.flip_horizontal {
-webkit-transform: scaleY(-1, -1);
transform: scale(-1, -1);
}
<img id="image" src="https://via.placeholder.com/150x300">
<div class="button">
<button id="button_horizontal">Flip Horizontal</button>
<button id="button_vertical">Flip Vertical</button>
</div>