Мне нужен браузер для обновления моего интерфейса перед выполнением длительной (er) операции. В настоящее время браузер ждет, пока все не будет завершено, а затем обновит пользовательский интерфейс, что означает, что пользовательский интерфейс зависает на 1-2 секунды, а затем обновляет.Как заставить браузер перекрасить и избежать задержки обновления пользовательского интерфейса?
Таким образом, пользователь нажимает кнопку нажмет в интерфейсе, то этот код выполняется:
$('#mybutton').click(function(e) {
e.preventDefault();// prevent the default anchor functionality
$('#mainctrldiv').css('display', 'none');
$('#otherctrldiv').css('display', 'block');
var img = $('<img id="spareimg" style="display:none;">');
img.attr('src', canvas.getActiveObject().toDataURL()); // This is causing the delay!
img.appendTo('body');
}
Это (функция FabricJS) canvas.getActiveObject().toDataURL()
, что нашли время. Я хочу, чтобы это произошло после того, как 2 div были явно отображены пользователю, и они этого не замечают. Вам нужно, чтобы это работало во всех широко используемых браузерах! (как мобильный, так и рабочий стол).
исследований предположили, что чтение свойства отображения CSS сразу после установки их заставит браузер перекрашивать, поэтому я добавил следующий код сразу после установки этих свойств, но задержка еще произошло:
$('#mainctrldiv').css('display');
$('#otherctrldiv').css('display');
Большое спасибо за какие-либо предложения!
Что вы подразумеваете под 'delay'? Если холст слишком велик, преобразование его в URL-адрес данных может блокировать основной поток за заметное количество времени. Как точно проявляется задержка? – Cristy
Мог сбросить скрытый, отключенный флажок в какой-то момент в dom, который может видеть как '# mainctrldiv', так и' # otherctrldiv' и иметь правила css, которые переключают, который на этот флажок получает 'display: none' и' display: block' будучи ': checked'. Тем не менее, я чувствую, что это связано с тем, как jQuery управляет вещами, а не строго, что он пытается сделать. – abluejelly
'$ ('# mainctrldiv'). Css ('display');' является неполным. Вы имели в виду '$ ('# mainctrldiv'). Css ('display', 'block');'? – Cristy