Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2018, 07:51
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Обновление содержимого страницы поверх старой - возможно ли?
Существуют ли какие-то способы запретить браузеру удалять старый фон и прорисовывать очередную страницу поверх предыдущей, аналогично как в gif-анимации?

Страница периодически обновляется на экране второго монитора, пока я редактирую её содержимое на основном, чтобы лишний раз не переключаться между окнами и сосредоточиться на вёрстке:
<meta http-equiv=refresh content='3'>

Проблема в том, что из 20 раз перезагрузки в минуту страница 12-17 раз отображается пустой, так как изображение образца не успевает загрузиться:
<style>
body {
    background-image:url('draft.png');
}
</style>

То есть, только в 3-8 случаях из 20 в минуту мерцание пустой страницы не наблюдается и виден образец с моими элементами поверх чисто…
Пробовал делать и так:
<html style="background-image:url('draft.png');" xmlns="http://www.w3.org/1999/xhtml">
Но и это не помогает…

Можно ли каким-то образом запретить браузеру вообще обновлять своё окно до полной загрузки ресурсов?

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 25.10.2018, 07:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Live edit для бедных )) Извините.
Скачайте лучше live edit плагин для своей среды разработки.
Ну ил обновляйте страницу так:
<body onload="setTimeout('location.reload();',3e3);">
Ответить с цитированием
  #3 (permalink)  
Старый 25.10.2018, 08:19
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Сообщение от Nexus Посмотреть сообщение
Live edit для бедных )) Извините.
Скачайте лучше live edit плагин для своей среды разработки.
Ну ил обновляйте страницу так:
<body onload="setTimeout('location.reload();',3e3);">
Совсем не то…
Пользуюсь NotePad++ и заранее в графическом редакторе нарисовал интерфейс, чтобы средствами HTML-CSS-JS его воспроизвести алгоритмически.
Но проблема как раз не в том, что мерцают динамически генерируемые элементы, а мерцает сам фон, даже если выбросить все скрипты и оставить пустой «<body></body>»: Браузер очищает окно, но не успевает загрузить фон!

Например:
<html>
<head>
<meta http-equiv=refresh content='3'>
<style>
body {
    background-image: url('https://javascript.ru/forum/images/ca_serenity/misc/logo.gif');
}
</style>
</head>
<body>
</body>


И здесь Live Edit совсем не помогает, так как матрица из сотни элементов визуально была нарисована и сохранена в картинку. И она - мерцает!

Всё равно, что логотип этого форума я сейчас буду пытаться генерировать алгоритмом в canvas: Мерцает именно логотип-оригинал постоянно в пустой странице…

Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2018, 12:55
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Попробуйте сохранить картинку как data:url и подключить её во внешнем css-файле. Прорисовка страницы должна блокироваться пока внешний css не загрузится и не распарсится - авось поможет.
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2018, 13:04
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

А, ещё попробуйте не релоад, а location.href на ту же самую страницу.
Ответить с цитированием
  #6 (permalink)  
Старый 25.10.2018, 15:28
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Предлагаю использовать упаковщик для этих целей
https://parceljs.org/getting_started.html

правда нужен nodejs )

из коробки умеет делать HMR (hot-module-replacement) - т.е. поправил файл, а он автоматически в браузере обновится... для javascript, html, css работает.
Ответить с цитированием
  #7 (permalink)  
Старый 25.10.2018, 16:27
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Сообщение от Белый шум Посмотреть сообщение
Попробуйте сохранить картинку как data:url и подключить её во внешнем css-файле. Прорисовка страницы должна блокироваться пока внешний css не загрузится и не распарсится - авось поможет.
Помогло!
Правда этот css весит почти 300кб, но страница теперь не мерцает и можно продолжать разработку…

Просто я думал, может есть более элегантные решения…

Спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 25.10.2018, 16:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Paguo-86PK
Правда этот css весит почти 300кб,
уверен что можно оптимизировать.
Ответить с цитированием
  #9 (permalink)  
Старый 25.10.2018, 23:03
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Проектирую клавиатуру…
Сообщение от j0hnik Посмотреть сообщение
уверен что можно оптимизировать.
Нe получится: Файл большой и бинарный…

Вот, кстати, что я делаю…
<html>
<head>
<meta http-equiv=refresh content='3000' />
<script>
CanvasRenderingContext2D.prototype.roundRect = function(x, y, width, height, radius, fill, stroke) {
	if(typeof stroke == "undefined")
		stroke = true;
	if(typeof radius === "undefined")
		radius = 5;
	if(typeof radius === "number")
		radius = {tl: radius, tr: radius, br: radius, bl: radius};
	else {
		var defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};
		for(var side in defaultRadius) {
			radius[side] = radius[side] || defaultRadius[side];
		}
	}
	this.beginPath();
	this.moveTo(x + radius.tl, y);
	this.lineTo(x + width - radius.tr, y);
	this.quadraticCurveTo(x + width, y, x + width, y + radius.tr);
	this.lineTo(x + width, y + height - radius.br);
	this.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);
	this.lineTo(x + radius.bl, y + height);
	this.quadraticCurveTo(x, y + height, x, y + height - radius.bl);
	this.lineTo(x, y + radius.tl);
	this.quadraticCurveTo(x, y, x + radius.tl, y);
	this.closePath();
	if(fill)
		this.fill();
	if(stroke)
		this.stroke();
}
//////////////////////////////////////////////////////////////////////////////
var	aButtons= [
		"~  `Ё 	! 11 ¡	@\" 2 2	#№ 3 3	$;£4 ¤	%  5 €	^ :6 ¼	&? 7 ½	*  8₽¾	(  9 ‘	)  0 ’	_ …- ¥	+ ÷= ×	|\\¦\\/¬",
		"Q   Й 	W   Ц 	E   У 	R   К®	Tѐ  Е 	Y   Н 	U   Г 	I   Ш 	O   Щ 	P   З 	{  [Х«	}  ]Ъ»",
		"A   Ф 	S   Ы 	D   В 	F   А 	G   П 	H   Р 	J   О 	K   Л 	L   Д 	: °;Ж¶	\" ¨'Э´",
		"Z   Я 	X   Ч 	C   С©	V   М 	Bѝ  И 	N   Т 	M   Ь 	<  ,Б 	>  .Ю 	?. /,¿"
	];
//////////////////////////////////////////////////////////////////////////////
var	hButton	= null;
var	hCanvas	= null;
var	hCtx	= null;

function DrawButton(mark, x, y) {
	var	size	= 124.7;
	var	thick	= 12.5;
	var	border	= 3.5;
	var	radius	= 3.05;
	var	back	= 1.75;
	var	h, l, m, r, v, w;
	hCtx.fillStyle = "rgb(90, 90, 90)";
	hCtx.beginPath();
	hCtx.moveTo(x + size - back, y + back);
	hCtx.lineTo(x + back, y + back);
	hCtx.lineTo(x + back, y + size - back);
	hCtx.closePath();
	hCtx.fill();
	hCtx.fillStyle = "rgb(31, 31, 31)";
	hCtx.beginPath();
	hCtx.moveTo(x + size - back, y + back);
	hCtx.lineTo(x + size - back, y + size - back);
	hCtx.lineTo(x + back, y + size - back);
	hCtx.closePath();
	hCtx.fill();
	hCtx.fillStyle = "rgb(68, 68, 68)";
	hCtx.strokeStyle = "rgb(7, 7, 7)";
	hCtx.lineWidth = border;
	hCtx.roundRect(x, y, size, size, radius * radius, false, true);
	hCtx.roundRect(x + thick, y + thick, size - 2 * thick, size - 2 * thick, radius, true, false);
	if(typeof mark == "string") {
		hCtx.font = "46px helvetica";
		h = parseInt(hCtx.font, 10);
		hCtx.fillStyle = "white";
		hCtx.fillText(mark, x + (size - hCtx.measureText(mark).width) / 2, y + (size / 2 + h / 2));
	} else {
		v = border + thick;
		w = (size - border - thick);
		m = x + size / 2;
		l = m - w / 3.69;
		r = m + w / 2.9;
		hCtx.fillStyle = "white";
		hCtx.font = "46px helvetica";
		h = parseInt(hCtx.font, 10);
		s = mark[3]; hCtx.fillText(s, l - hCtx.measureText(s).width / 2, y + size / 2 + h / 1.125);
		hCtx.font = "40px helvetica";
		h = parseInt(hCtx.font, 10);
		s = mark[0]; hCtx.fillText(s, l - hCtx.measureText(s).width / 2, y + size / 2 - h / 4);
		hCtx.fillStyle = "red";
		s = mark[1]; hCtx.fillText(s, m - hCtx.measureText(s).width / 2, y + size / 2 - h / 4);
		s = mark[4]; hCtx.fillText(s, m - hCtx.measureText(s).width / 2, y + size / 2 + h / 1);
		hCtx.font = "24px helvetica";
		hCtx.fillStyle = "dodgerblue";
		s = mark[5]; hCtx.fillText(s, r - hCtx.measureText(s).width / 2, y + size / 2 + h / 1);
		h = parseInt(hCtx.font, 10);
		s = mark[2]; hCtx.fillText(s, r - hCtx.measureText(s).width / 2, y + v + h - h / 4);
	}
}

function main() {
	hCanvas = document.getElementById("Draft");
	hCtx = hCanvas.getContext("2d");
	DrawButton("Esc", 56.5, 119);
	DrawButton("F1", 340, 118);
	var	x = 56.5, y = 310.5;
	aButtons[0].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 252, y = 444;
	aButtons[1].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 315, y = 577.5;
	aButtons[2].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 386, y = 711;
	aButtons[3].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
}
</script>
<olink rel="stylesheet" href="body.css">
<style>
body
{
	background-image:url('http://pluspng.com/img-png/keypad-png-hd-file-bijoy-keyboard-png-3171.png');/*('keyboard-0.png');/*('keyboard_my.svg');*/
	background-repeat:no-repeat;
	background-position-left:99px;
	background-color	:black;
	padding		:0px 0px 0px 0px;
}
</style>
</head>
<body onload='setTimeout(main, 5000)'>
<canvas id=Draft width=2048 height=960></canvas>
</body>

Чтобы руками в графическом редакторе не перемаркировывать, написал скрипт…
Тем более, что в исходном изображении заметны свои косяки местами.
Сейчас проблема в отрисовке клавиши «Enter» сто́ит. Она и нарисована как-то криво…

P.S.: Вообще-то, хочу разработать собственную раскладку…
А чтобы Keyboard Layout Creator вслепую не маяться, хочу визуальную интерактивную модель построить алгоритмом, чтобы эстетически оценить её…

Последний раз редактировалось Paguo-86PK, 25.10.2018 в 23:14.
Ответить с цитированием
  #10 (permalink)  
Старый 26.10.2018, 09:19
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Так вы все размеры вручную подбирали? Но почему так, ведь HTML-элементы зависят друг от друга, почему бы их не использовать? Вот я попробовал, за 35 минут получилось сделать, я не сидел и не подбирал все позиции подряд, оно само расставилось по местам, только вон те кнопки пошире которые, только их пришлось вручную подогнать, это наверное проще, чем у вас, или я не так понял?
<html>
<head>
	<style>
		body {
			background: linear-gradient(135deg, rgba(226,226,226,1), rgba(219,219,219,1) 26%, rgba(203, 204, 207, 1) 64%);
			text-align: center;
			font-size: 1.25vw;
		}
		
		kbd {
			background:
				radial-gradient(farthest-side at 50% -100%, rgba(0, 0, 0, 0.6), transparent),
				radial-gradient(farthest-side at 50% 200%, rgba(255, 255, 255, 0.1), transparent)
				#080808;
			box-sizing: border-box;
			border-radius: 0.25em;
			border: 0.05em rgba(255, 255, 255, 0.4) solid;
			border-right-color: rgba(255, 255, 255, 0.2);
			border-bottom-color: rgba(255, 255, 255, 0.2);
			box-shadow: 0 0 0.05em .125em black;
			cursor: pointer;
			height: 4em;
			margin: 0 0.75em 0.75em 0;
			position: relative;
			overflow: visible;
			text-align: center;
			transition: all ease-in-out 200ms;
			vertical-align: middle;
			width: 4em;
			color: white;
			color: rgba(206, 241, 248, 0.7);
			display: inline-grid;
			grid-template-columns: repeat(3, 1fr);
			grid-template-rows: repeat(3, 1fr);
			font: 1em / 1em Helvetica Neue, Segoe UI, Roboto, Ubuntu, sans-serif;
		}
		
		kbd:active {
			border: 0.05em rgba(255, 255, 255, 0.2) solid;
			box-shadow: 0 0 0.05em .125em rgba(0, 0, 0, 0.8);
		}
		
		kbd:not([data-half]) + kbd[data-half] {
			height: 1.9em;
			border-bottom-left-radius: 0;
			border-bottom-right-radius: 0;
			position: absolute;
			z-index: 1;
			border-bottom-width: .15em;
		}
		
		kbd[data-half] + kbd[data-half] {
			height: 1.9em;
			border-top-left-radius: 0;
			border-top-right-radius: 0;
			margin-top: 2em;
			border-top-width: .15em;
		}
		
		kbd span:only-child {
			grid-area: 2 / 1 / 3 / span 3;
		}
		
		kbd.m span:only-child {
			grid-area: 3 / 1 / 4 / span 3;
			padding: .25em;
		}
		
		kbd span:first-child:nth-last-child(2),
		kbd span:first-child:nth-last-child(3)
		{
			grid-area: 1 / 2;
			transform: translateY(50%);
		}
		
		kbd span:nth-child(2):last-child,
		kbd span:nth-child(2):nth-last-child(2) {
			grid-area: 2 / 2;
			transform: translateY(50%);
		}
		
		kbd span:nth-child(3):last-child {
			grid-area: 1 / 3;
		}
		
		kbd.m:nth-child(-n + 6) {
			text-align: left;
		}
		
		kbd.m:nth-last-child(-n + 6) {
			text-align: right;
		}

		kbd.x2 { width: 6em;}
		kbd.x3 { width: 7.5em; }
		kbd.x4 { width: 10em; }
		kbd.x5 { width: 5em; }
		kbd.x6 { width: 24em; }
		
		.touch-bar {
			border-radius: 0.25em;
			background-color: #000;
			padding: .5em;
			margin: auto;
			margin: 0 0.75em 0.75em 0;
			display: inline-block;
			box-sizing: border-box;
			width: 71em;
		}
		
		.touch-bar kbd {
			margin: 0;
			padding: 0em .5em;
			background: #333;
			border: 0;
			height: 2em;
			color: white;
			display: inline-flex;
			justify-content: center;
			align-items: center;
		}
		
		.touch-bar kbd span {
			transform: scale(1.25) !important;
		}
		
		.touch-bar[data-list="1"] kbd span:not(:first-child),
		.touch-bar[data-list="2"] kbd span:not(:last-child)
		{
			display: none;
		}
	</style>
</head>

<body>
	<section class="touch-bar" data-list="1" onclick="this.dataset.list = (+this.dataset.list) % 2 + 1">
		<kbd>[&#x1f600;][esc]</kbd>
		<kbd>[&#x1f601;][F1]</kbd>
		<kbd>[&#x1f602;][F2]</kbd>
		<kbd>[&#x1f431;][F3]</kbd>
		<kbd>[&#x1f639;][F4]</kbd>
		<kbd>[&#x1f60e;][F5]</kbd>
		<kbd>[&#x2764;&#xfe0f;][F6]</kbd>
		<kbd>[&#x1f4a9;][F7]</kbd>
		<kbd>[&#x1f937;][F8]</kbd>
		<kbd>[&#x1f525;][F9]</kbd>
		<kbd>[&#x1f914;][F10]</kbd>
		<kbd>[&#x231b;&#xfe0f;][F11]</kbd>
		<kbd>[&#x1f64c;][F12]</kbd>
	</section>
	<section>
		<kbd>~`</kbd>
		<kbd>!1</kbd>
		<kbd>@2"</kbd>
		<kbd>#3№</kbd>
		<kbd>$4%</kbd>
		<kbd>%5:</kbd>
		<kbd>^6,</kbd>
		<kbd>&amp;7.</kbd>
		<kbd>*8;</kbd>
		<kbd>(9</kbd>
		<kbd>)0</kbd>
		<kbd>_-</kbd>
		<kbd>+=</kbd>
		<kbd class="m x2">[delete]</kbd>
	</section>
	<section>
		<kbd class="m x2">[tab]</kbd>
		<kbd>QЙ</kbd>
		<kbd>WЦ</kbd>
		<kbd>EУ</kbd>
		<kbd>RК</kbd>
		<kbd>TЕ</kbd>
		<kbd>YН</kbd>
		<kbd>UГ</kbd>
		<kbd>IШ</kbd>
		<kbd>OЩ</kbd>
		<kbd>PЗ</kbd>
		<kbd>{Х[</kbd>
		<kbd>}Ъ]</kbd>
		<kbd>|Ё\</kbd>
	</section>
	<section>
		<kbd class="m x3">[caps lock]</kbd>
		<kbd>AФ</kbd>
		<kbd>SЫ</kbd>
		<kbd>DВ</kbd>
		<kbd>FА</kbd>
		<kbd>GП</kbd>
		<kbd>HР</kbd>
		<kbd>JО</kbd>
		<kbd>KЛ</kbd>
		<kbd>LД</kbd>
		<kbd>:Ж;</kbd>
		<kbd>"Э'</kbd>
		<kbd class="m x3">[return]</kbd>
	</section>
	<section>
		<kbd class="m x4">[shift]</kbd>
		<kbd>ZЯ</kbd>
		<kbd>XЧ</kbd>
		<kbd>CС</kbd>
		<kbd>VМ</kbd>
		<kbd>BИ</kbd>
		<kbd>NТ</kbd>
		<kbd>MЬ</kbd>
		<kbd>&lt;Б,</kbd>
		<kbd>&gt;Ю.</kbd>
		<kbd>?/</kbd>
		<kbd class="m x4">[shift]</kbd>
	</section>
	<section>
		<kbd class="m">[fn]</kbd>
		<kbd class="m">[control]</kbd>
		<kbd class="m">[option]</kbd>
		<kbd class="m x5">[command]</kbd>
		<kbd class="m x6"></kbd>
		<kbd class="m x5">[command]</kbd>
		<kbd class="m">[option]</kbd>
		<kbd>[◀&#xfe0e;]</kbd>
		<kbd data-half>[▲&#xfe0e;]</kbd>
		<kbd data-half>[▼&#xfe0e;]</kbd>
		<kbd>[▶&#xfe0e;]</kbd>
	</section>
	<script>
	
		for(const kbd of document.querySelectorAll("kbd")) {
			kbd
				.textContent
				.split(/\[([^\]]*)\]|/)
				.filter(v => !!v)
				.reduce((_, v) => {
					const span = document.createElement("span");
					span.textContent = v;
					kbd.appendChild(span);
				}, kbd.textContent = "")
		}
		
	</script>
</body>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянное обновление страницы Sayler91 Общие вопросы Javascript 6 01.12.2017 22:06
Обновление страницы браузера с переходом по ссылке wemon Общие вопросы Javascript 3 27.04.2017 14:08
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
текст поверх страницы quux Общие вопросы Javascript 2 24.01.2009 19:34
Цикличное обновление страницы Roman_kstu Общие вопросы Javascript 7 29.05.2008 05:55