Нужно что бы при клике значение translateX изменялось при каждом клике. Сейчас событие срабатывает один раз. Проблемма в том что я незнаю как передать значение css свойства в переменную...
<script type="text/javascript">
$('.znSlickNav-prev').click(function () {
$('.slick-track').css("transform","translateX(-"+333+"px)");
})
</script>
Нужно что бы при каждом клике translateX увеличивалось на 333px
var tr = 0;
$('.znSlickNav-prev').click(function(){
tr += 333;
$('.slick-track').css("transform","translateX(-"+tr+"px)");
});
Подключи jQuery перед скриптом.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Проблема подхода из принятого ответа в том, что присвоение css-свойству transform
значения translate
"ломает" другие трансформации элемента (например, поворот).
Есть более гибкий способ. Современные браузеры поддерживают интерфейс DOMMatrix
, который предназначен как раз для работы с трансформациями.
Подробнее о нем можно почитать например, на MDN(en).
Или, можно использовать такие вот простые классы-помощники, меняющие значение трансформа через matrix()
:
class CssTransform2d {
constructor(element) { this.el = element; }
get matrix() {
let tm = getComputedStyle(this.el).getPropertyValue('transform').match(/\((.*)\)/);
return (tm ? tm[1] : '1,0,0,1,0,0').split(/,\s*/).map(v => +v);
}
set matrix(v) { this.el.style.transform = `matrix(${v.join(', ')})`; }
get translate() { return this.matrix.slice(-2); }
set translate(xy) { this.matrix = [...this.matrix.slice(0, 4), ...xy]; }
get translateX() { return this.matrix[4]; }
set translateX(v) { this.matrix = [...this.matrix.slice(0, 4), v, this.matrix[5]]; }
get translateY() { return this.matrix[5]; }
set translateY(v) { this.matrix = [...this.matrix.slice(0, 4), this.matrix[4], v]; }
}
/*--------------------- использование ---------------------*/
const ct = new CssTransform2d($('#box')[0]);
console.log(ct.matrix.join(', '));
$('.btn-move').click(function () {
const $this = $(this);
let [x, y] = ct.translate;
switch ($this.data('direction')) {
case '<': x -= 30; break;
case '>': x += 30; break;
case '∧': y -= 30; break;
case '∨': y += 30;
}
ct.translate = [x, y];
console.clear() || console.log(ct.matrix.join(', '));
});
.btn-move { width: 2rem; height: 1.7rem; }
.btn-move::after { content: attr(data-direction); display: inline; }
#btns { position: relative; z-index: 99; }
#box {
width: 3rem; height: 3rem;
background: #4d4;
transition: transform 0.15s linear;
transform: translate(10rem, 20vh) rotate(45deg); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="btns">
<button class="btn-move" data-direction="<"></button>
<button class="btn-move" data-direction="∧"></button>
<button class="btn-move" data-direction="∨"></button>
<button class="btn-move" data-direction=">"></button>
</div>
<div id="box"></div>
(код в примере работает только с 2D-трансформом, тогда как DOMMatrix
поддерживает и трехмерные. Плюс, стандартный интерфейс предлагает гораздо больше возможностей, и написан он не на коленке :)
)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не пойму, как так получается, что значением аргумента year становятся значения переменных carYear и personYear? Распишите пошагово, пожалуйста
Нужно при клике скрыть все дочернии элементы класса tp-revslider-slidesli и показать все дочернии элементы класса tp-revslider-slidesli-2, делал так не получилось:
В Play Market(и не только, но возьмём его) есть приложения(на ПК это сайты)Устройства которые их скачивают имеют разные размеры экрана