#javascript #css #scale #translate
Вопрос:
Следующий код позволяет управлять ими индивидуально, моя проблема в том, что если вы отрегулируете один, а затем отрегулируете другой, значение для первого, которое вы скорректировали, будет потеряно (удалено) вместо добавленного (добавлено?) к встроенному css.
function scaleXfont(e) {
var scaleamount = document.getElementById("scaleXslider").value;
document.getElementById("transscale").style.transform = "scaleX(" scaleamount ")";
currentcss();
}
function scaleYfont(e) {
var scaleamount = document.getElementById("scaleYslider").value;
document.getElementById("transscale").style.transform = "scaleY(" scaleamount ")";
currentcss();
}
function currentcss() {
document.getElementById("currentcss").innerText = document.getElementById("transscale").style.cssText;
}
<div class="singlecontrol">
<span style="vertical-align: middle;">ScaleX</span>
<input style="vertical-align: middle;" id="scaleXslider" oninput="scaleXfont(event)" type="range" value="0.0" min="-10" max="10" step="0.01" autocomplete="off" />
</div>
<div class="singlecontrol"
><span style="vertical-align: middle;">ScaleY</span>
<input style="vertical-align: middle;" id="scaleYslider" oninput="scaleYfont(event)" type="range" value="0.0" min="-10" max="10" step="0.01" autocomplete="off" /></div>
<div id="cssinuse">
Current CSS = <br />
<span id="currentcss"></span>
</div>
<br /><br />
<div style="display:inline-block; width:100%; text-align:center;">
<div id="transscale">Stretch/Flip Me</div>
</div>
Комментарии:
1. Привет! Да, вы должны запомнить и поместить 2 значения, каждый раз разделенные пробелом.
2. @Philippe Как бы я это сделал? Должен ли я получить текущее значение (если оно установлено) для другого, а затем добавить?
3. Да, вы должны 🙂
4. Не могли бы вы (или кто-нибудь другой), пожалуйста, дать ответ на основе моего примера кода, у меня, кажется, есть правильная теория о том, что мне нужно сделать, но я не смог (попробовал несколько вещей сейчас) на самом деле это сделать.
Ответ №1:
для преобразования потребуется, чтобы в нем постоянно были установлены обе шкалы.
Чтобы избежать необходимости каждый раз получать текущие значения, а затем выполнять сравнения/замены строк, этот фрагмент позволяет JS установить пару переменных CSS-x и-y со стилем в элементе, который имеет эту форму:
style="transform: scaleX(var(--x)) scaleY(var(--y));"
function scaleXfont(e) {
var scaleamount = document.getElementById("scaleXslider").value;
document.getElementById("transscale").style.setProperty('--x', scaleamount);
currentcss();
}
function scaleYfont(e) {
var scaleamount = document.getElementById("scaleYslider").value;
document.getElementById("transscale").style.setProperty('--y', scaleamount);
currentcss();
}
function currentcss() {
document.getElementById("currentcss").innerText = document.getElementById("transscale").style.cssText;
}
<div class="singlecontrol">
<span style="vertical-align: middle;">ScaleX</span>
<input style="vertical-align: middle;" id="scaleXslider" oninput="scaleXfont(event)" type="range" value="0.0" min="-10" max="10" step="0.01" autocomplete="off" />
</div>
<div class="singlecontrol"><span style="vertical-align: middle;">ScaleY</span>
<input style="vertical-align: middle;" id="scaleYslider" oninput="scaleYfont(event)" type="range" value="0.0" min="-10" max="10" step="0.01" autocomplete="off" /></div>
<div id="cssinuse">
Current CSS = <br />
<span id="currentcss"></span>
</div>
<br /><br />
<div style="display:inline-block; width:100%; text-align:center;">
<div id="transscale" style="transform: scaleX(var(--x)) scaleY(var(--y)); --x: 1; --y: 1;">Stretch/Flip Me</div>
</div>
Комментарии:
1. Спасибо, вы знаете, что этот код работает не так, как задумывалось, потому что масштаб преобразования не применяется к div «Растянуть/перевернуть меня» (по крайней мере, это относится ко мне в Firefox)
2. Упс! Спасибо за проверку — каким-то образом отсутствующее двоеточие и начальные условия были пропущены, когда я вставил код во фрагмент из своей системы. Теперь все должно быть в порядке — не могли бы вы проверить? Я тестировал на Edge/Windows10.
3. Сказав это, да, значения изменены и соответствуют значениям, полученным с помощью ползунка, но их необходимо отрегулировать.
4. Да, похоже, теперь при необходимости меняйте их с ползунков, так что спасибо вам за это. выходной текст CSS кажется немного странным, хотя с отображением переменных
5. Я не изменил способ вывода текста CSS — я думаю, вам придется посмотреть на это, чтобы удалить переменные.
Ответ №2:
Теперь решается путем захвата обоих значений ползунка и одновременного их применения с помощью
var scaleXamount = document.getElementById("scaleXslider").value;
var scaleYamount = document.getElementById("scaleYslider").value;
style.transform = "scale(" scaleXamount ", " scaleYamount ")";
Это был комментарий
для преобразования потребуется, чтобы в нем постоянно были установлены обе шкалы.
это заставило меня так подумать, так что спасибо тебе.
Рабочий код..
function scalefont(e) {
var scaleXamount = document.getElementById("scaleXslider").value;
var scaleYamount = document.getElementById("scaleYslider").value;
document.getElementById("transscale").style.transform = "scale(" scaleXamount ", " scaleYamount ")";
currentcss();
}
function currentcss() {
document.getElementById("currentcss").innerText = document.getElementById("transscale").style.cssText;
}
<div class="singlecontrol">
<span style="vertical-align: middle;">ScaleX</span>
<input style="vertical-align: middle;" id="scaleXslider" oninput="scalefont(event)" type="range" value="1.0" min="-10" max="10" step="0.001" autocomplete="off" />
</div>
<div class="singlecontrol"
><span style="vertical-align: middle;">ScaleY</span>
<input style="vertical-align: middle;" id="scaleYslider" oninput="scalefont(event)" type="range" value="1.0" min="-10" max="10" step="0.001" autocomplete="off" /></div>
<div id="cssinuse">
Current CSS = <br />
<span id="currentcss"></span>
</div>
<br /><br />
<div style="display:inline-block; width:100%; text-align:center;">
<div id="transscale">Stretch/Flip Me</div>
</div>