Window.visualviewport.scale не обновляется до тех пор, пока не заканчивается стопка вызовов функцийJavascript

Форум по Javascript
Ответить
Anonymous
 Window.visualviewport.scale не обновляется до тех пор, пока не заканчивается стопка вызовов функций

Сообщение Anonymous »

Это часть большого Tampermonkey Userscript, который я пишу. class = "Snippet-Code">
// ==UserScript==
// @name provaui
// @namespace http://tampermonkey.net/
// @version 2025-09-20
// @description try to take over the world!
// @author You
// @match https://www.soundcraft.com/ui24-softwar ... mixer.html
// @icon Изображение
// @grant none
// ==/UserScript==
let UserScale=1; // current scale variable
let dbgLog="";

function setViewportScale(ViewScale) {
console.log(dbgLog+"setViewportScale Start"); dbgLog=dbgLog+"....";
let NewScale = Number(ViewScale);
CurrentScale=NewScale;
console.log(dbgLog+"NewScale: "+NewScale);

console.log(dbgLog+"Applying new scale");
let vpElement = document.querySelector("meta[name=viewport]");
if (!vpElement){
vpElement=document.createElement('meta');
vpElement.name = "viewport";
document.getElementsByTagName('head')[0].appendChild(vpElement);
}
let content = 'width=device-width, initial-scale=' + NewScale + ', maximum-scale=1.5, minimum-scale=0.5, user-scalable=yes';
vpElement.setAttribute('content', content);
console.log(dbgLog+"VP Scale is "+ window.visualViewport.scale);
dbgLog=dbgLog.replace("....",""); console.log(dbgLog+"setViewportScale End");
}
// =============================================================
function updateSize() {
console.log(dbgLog+"updateSize Start"); dbgLog=dbgLog+"....";
console.log(dbgLog+"VP Scale is "+ window.visualViewport.scale);
dbgLog=dbgLog.replace("....",""); console.log(dbgLog+"updateSize End");
}
// =============================================================

// zoom button
let aDiv = document.createElement ('div');
aDiv.setAttribute ('id', 'ZoomButtonContainer');
aDiv.style = 'position:absolute; top: 12px; left: 10px; z-index: 99998; background-color: orange; display: flex; justify-content: center; align-items: center; padding: 5px;'
aDiv.innerHTML = ''
+ 'Zoom'
+ 'Log'
;
document.body.appendChild (aDiv);
document.getElementById('bZoom').addEventListener('click', function(event) {
event.stopPropagation();
if (UserScale==1) {
UserScale = 0.7;
}else{
UserScale = 1;
}
setViewportScale(UserScale);
});
document.getElementById('bLog').addEventListener('click', function(event) {
console.log(dbgLog+"Log Button: VP Scale is "+ window.visualViewport.scale);
});

// Add an event listener for window resize
window.addEventListener('resize', updateSize);

(function() {
'use strict';

// Your code here...
})();< /code>
< /div>
< /div>
< /p>
Тот же точно такой код на странице, объявленной в заголовке пользователя, создает этот вывод: < /p>
Log Button: VP Scale is 1

setViewportScale Start
....NewScale: 0.7
....Applying new scale
....VP Scale is 1
setViewportScale End
updateSize Start
....VP Scale is 1
updateSize End

Log Button: VP Scale is 0.7002456784248352

setViewportScale Start
....NewScale: 1
....Applying new scale
....VP Scale is 0.7002456784248352
setViewportScale End
updateSize Start
....VP Scale is 0.7002456784248352
updateSize End

Log Button: VP Scale is 1
< /code>
Как вы можете видеть, событие Resisize по -прежнему показывает старое значение масштаба, даже если масштабирование работает безупречно.
Что я делаю не так? Как я могу прочитать обновленное значение масштаба?


Подробнее здесь: https://stackoverflow.com/questions/797 ... calls-ends
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»