0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お絵かきできるSNSを作りたい!10

Last updated at Posted at 2020-06-26

お絵かきできるSNSを作りたい後半戦、1つ前に戻すを作っていきます。

筆跡が分るようにjsonで座標を逐一保存しようかとも考えたのですが、管理が大変そうだったので1ストローク毎にcanvasの中身をスクリーンショットを撮る感じにしました。

まず、対処のボタンにイベントを追加します。

<a href="#" class="btn" onclick="doPrevCanvas();">1つ前に戻す</a>

ローカルストレージを用意し、レイヤー1とレイヤー2をそれぞれ1ストローク毎に保存していきます。

// ストレージの初期化
var myStorage = localStorage;

function initLocalStorage(){
	myStorage.setItem("__layer", JSON.stringify([]));
	myStorage.setItem("__layer2", JSON.stringify([]));
}

function setLocalStoreage(){
	var png = $("#canvas")[0].toDataURL();
	var logs = JSON.parse(myStorage.getItem("__layer"));
	setTimeout(function(){
		logs.unshift({png});
		myStorage.setItem("__layer", JSON.stringify(logs));
	}, 0);
	var png2 = $("#canvas2")[0].toDataURL();
	var logs2 = JSON.parse(myStorage.getItem("__layer2"));
	setTimeout(function(){
		logs2.unshift({png2});
		myStorage.setItem("__layer2", JSON.stringify(logs2));
	}, 0);
}

function doPrevCanvas(){
	var logs = JSON.parse(myStorage.getItem("__layer"));
	if(logs.length > 0){
		logs.shift();
		setTimeout(function(){
			myStorage.setItem("__layer", JSON.stringify(logs));
			ct.clearRect(0, 0, $("#canvas").width(), $("#canvas").height());
			if (logs.length == 0) {
				draw("canvas",logs["png"]);
			} else {
				draw("canvas",logs[0]["png"]);
			}
		}, 0);
	}
	var logs2 = JSON.parse(myStorage.getItem("__layer2"));
	if(logs2.length > 0){
		logs2.shift();
		setTimeout(function(){
			myStorage.setItem("__layer2", JSON.stringify(logs2));
			ct2.clearRect(0, 0, $("#canvas2").width(), $("#canvas2").height());
			if (logs2.length == 0) {
				draw("canvas2",logs2["png2"]);
			} else {
				draw("canvas2",logs2[0]["png2"]);
			}
		}, 0);
	}
}

function draw(target,src) {
	var img = new Image();
	img.src = src;
	img.onload = function() {
		if (target == "canvas"){
			ct.drawImage(img, 0, 0);
		} else {
			ct2.drawImage(img, 0, 0);
		}
	}
}

あとは初期化の中でローカルストレージの用意し、線の書き終わりにレイヤー1と2の情報を保存します。

次回は小技(ショートカットの実装)を予定しています。
また気が向いたときにお会いしましょう。

次:お絵かきできるSNSを作りたい!11
最初:お絵かきできるSNSを作りたい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?