Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2018, 08:37
Интересующийся
Отправить личное сообщение для ioprst_ Посмотреть профиль Найти все сообщения от ioprst_
 
Регистрация: 29.03.2018
Сообщений: 11

Лагает масштабирование страницы
Привет. Написал код, который в зависимости от размеров окна браузера меняет размеры svg, т.к. я хочу, чтобы svg всегда была в максимально возможном масштабе по центру и чтобы страница вниз не прокручивалась. Проблема в следующем: если размеры страницы менять медленно и плавно, то все работает хорошо, но если сделать это быстро/резко, то масштаб будет не такой как хотелось бы, например, при резком сужении окна, боковые рамки классы box sidebar могут не уменьшится до 0рх, хотя должны. Подскажите как можно решить.
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>testPrj</title>
    <style>
        .wrapper {
          height: 100%;
          display: table;
          width: 100%;
        }
 
        .header {
          display: table-row;
          height: 1px;
        }
 
        .main {
          height: 100%;
          display: table;
          width: 100%;
        }
 
        .horizontalbar {
          display: table-row;
          height: 0px;
        }
 
        .box {
          display: table-cell;
        }
 
        .sidebar {
          width: 0px;
        }
 
        .content {
          height: 100%;
        }
 
        .content iframe {
          width: 100%;
          height: 100%;
          border: none;
          margin: 0;
          padding: 0;
          display: block;
        }
 
        .footer {
          display: table-row;
          height:1px;
        }
 
        /* Basic Style*/
        * { margin:0; padding:0;}
        html, body {
          height: 100%;
        }
    </style>
</head>
<body bgcolor="#ffff00">
    <div class="wrapper">
      <div class="header">
        <h1>Header</h1>
        <button onclick='location.href="Auto.html"'>Auto</button>
        <button onclick='location.href="Auto1.html"'>Auto1</button>
      </div>
 
      <div class="main">
        <div class="horizontalbar"></div>
        <div class="box sidebar"></div>
        <div class="box content">
          <iframe frameborder="0" marginwidth="0" marginheight="0" src="Auto.svg" id="AutoId"></iframe>
        </div>
        <div class="box sidebar"></div>
        <div class="horizontalbar"></div>
      </div>
      <div class="footer">Text. Text</div>
    </div>
    <script type="text/javascript" src="Auto.js"></script>
</body>
</html>

window.onload = function() {
    svgDoc = document.getElementById("AutoId").contentDocument;
    var timer = setInterval(anim, 100);
    var timerPost = setInterval(setPost, 100);
    initClick();
    updateSize();
}
 
window.onresize = updateSize;
 
function updateSize() {
    vpW = document.getElementsByClassName('main')[0].clientWidth;
    vpH = document.getElementsByClassName('main')[0].clientHeight;
    //imgW = document.getElementsByClassName('box content')[0].clientWidth;
    //imgH = document.getElementsByClassName('box content')[0].clientHeight;
    imgW = 1088; // size svg
    imgH = 1088; // size svg
    //alert(vpW + ':' + vpH + ' = ' + vpW/vpH + '      ' + imgW + ':' + imgH + ' = ' + imgW/imgH);
 
    if(vpW/vpH < imgW/imgH) {
        for(var i = 0; i < 2; i++) {
            document.getElementsByClassName('horizontalbar')[i].style.height = (vpH - vpW)/2 + 'px';
            document.getElementsByClassName('box sidebar')[i].style.width = '0px';
        }
    } else {
        for(var i = 0; i < 2; i++) {
            document.getElementsByClassName('box sidebar')[i].style.width = (vpW - vpH)/2 + 'px';
            //document.getElementsByClassName('horizontalbar')[i].style.height = '0px'
        }
    }
}
Ответить с цитированием
  #2 (permalink)  
Старый 21.06.2018, 09:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от ioprst_
window.onresize = updateSize;
гуглить debounce
Ответить с цитированием
  #3 (permalink)  
Старый 21.06.2018, 11:33
Интересующийся
Отправить личное сообщение для ioprst_ Посмотреть профиль Найти все сообщения от ioprst_
 
Регистрация: 29.03.2018
Сообщений: 11

рони,
не сочтите за наглость, не могли бы подсказать как ее здесь использовать? Я думаю, что вместо debounce надо использовать throttle для моей задачи (если я правильно понял), но пока что у меня только код перестает работать из-за использования этой функции.
Ответить с цитированием
  #4 (permalink)  
Старый 21.06.2018, 11:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

ioprst_,
function debounce(fn, interval) {
    let timer;
    return function debounced() {
        clearTimeout(timer);
        let args = arguments;
        let that = this;
        timer = setTimeout(function callOriginalFn() {
             fn.apply(that, args);
        }, interval);
    };
}
window.onresize = debounce(updateSize, 200)
Ответить с цитированием
  #5 (permalink)  
Старый 21.06.2018, 11:53
Интересующийся
Отправить личное сообщение для ioprst_ Посмотреть профиль Найти все сообщения от ioprst_
 
Регистрация: 29.03.2018
Сообщений: 11

рони, спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос текста из одной страницы сайта в форму другой страницы D-Nik Lubny Общие вопросы Javascript 0 18.03.2018 22:16
Масштабирование блока отдельно от страницы thenorthface Элементы интерфейса 0 11.12.2016 12:32
Масштабирование страницы в браузерах gizmomy Events/DOM/Window 21 16.10.2015 18:27
Запретить масштабирование страницы на смартфонах absolute noob Общие вопросы Javascript 1 28.11.2013 18:14
Загрузить элементы документа с другой страницы alexrussia Events/DOM/Window 10 25.03.2011 10:17