@VelesIS

Как лучше реализовать последовательный вывод изображений?

Добрый день!
В php отрисовывается картинка. В js функция эту картинку получает и выводит в div на экране. Вывод должен быть пошаговым, через паузу. Например рисует иероглиф, сначала первая черта, потом вторая и т.д.
Затык в выводе картинок на экран через паузу, все остальное работает.
Подскажите, как можно это реализовать? Node.js и ассинхронные функции не рассматриваю.

Код упростил до рисования круга.

$data = json_decode(file_get_contents("php://input"), true);
$width = $data["width"];
$height = $data["height"];
$im = imagecreatetruecolor(400, 400);
$red = imagecolorallocate($im, 0xCC, 0x00, 0x00);
$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
imagefill($im, 1, 1, $white);
imageellipse($im, $width, $height, 80, 80, $red);
ob_start();
imagepng($im);
$imageData = ob_get_clean();
$imageData = base64_encode($imageData);
$result['image'] = $imageData;
header('Content-type: application/json');
echo json_encode($result);


function sendData(wid,hei) {
		var data = {
			width: wid,
			height: hei,
		};
		var xhr = new XMLHttpRequest();
		xhr.open("POST", "Drawing.php", true);
		xhr.setRequestHeader("Content-Type", "application/json");
		xhr.onreadystatechange = function () {				
                     if (xhr.readyState == 4 && xhr.status == 200) {
                        var result = JSON.parse(xhr.responseText);
                        var img = new Image();
                        img.src = "data:image/jpeg;base64," + result.image;
			$('#myImg').empty();
			document.getElementById("myImg").appendChild(img);
                    }
		};
		xhr.send(JSON.stringify(data));
	}

	$('#anim').click(function(){
		$('#myImg').empty();
		sendData(200,50);
                sendData(200,200);
                sendData(200,360);
       });


Вывод картинок по клику кнопки.

Пробовал использовать setTimeout(sendData, 2000, 200, 200) - происходит вывод сразу всех картинок в один момент после указанной паузы, по факту видна только последняя картинка.
Пробовал с использованием функции sleep:
function sleep(milliseconds) {
		const date = Date.now();
		var currentDate = null;
		do {
			currentDate = Date.now();
		} while (currentDate - date < milliseconds);
	}

- выводит первую картинку и через паузу все остальные сразу (по факту видна только последняя).
Как вообще можно реализовать такой вывод картинок через паузу? Или сначала помещать все картинки в массив, а потом выводить стандартно через animation?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы