![]() |
|
|
|||||||
| Javascript Här diskuteras det som rör Javascript, AJAX, DOM & DHTML. |
![]() |
|
|
Trådverktyg | Visningsalternativ |
|
|
|
|
#1 |
|
Medlem
Registrerad: 2006-01-15
Inlägg: 86
Lösningar: 0 |
hjälp med local storage
det här med local storage är nytt för mig. jag har en sida med en canvas där det ritas en cirkel när man klickar på canvasen. det finns även en knapp (clear) som rensar canvasen.
Nu vill jag kunna spara med hjälp av local storage, - om jag ritat en cirkel eller flera och utan att klicka på clear knappen, jag uppdaterar sidan och då ska jag kunna få tillbaka sidan med dem eller den cirkel som jag fanns innan jag uppdaterade sidan. Hoppas att ni förstår vad jag menar...för det är ju meningen med localstorage väl. Jag har försökt med följande kod vid window.onload var canvas = document.getElementById('myCanvas') var ctx = canvas.getContext("2d"); var img = new Image(); img.onload = function() { canvas.width = this.width; cavans.height = this.height; ctx.drawImage(this, 0, 0); var base64jpeg = canvas.toDataURL("image/jpeg"); } img.src = "/images/myjpeg.jpg"; men det har inte funkat. Jag behöver helt enkelt hjälp med detta! Här är min kod i html5 och javascript HTML5 Kod:
<!DOCTYPE html>
<html>
<head>
<title>localstorage </title>
<script type="text/javascript" src="./localstor.js"></script>
<meta charset="utf-8" />
</head>
<body >
<section>
<div class="ritytor" >
<button id="clear" type="button" >Clear</button>
<canvas id="myCanvas" width="500" height="400" style="border:1px solid #c3c3c3;" onclick="UpdateInfo (event);">
Your browser dosen't support the HTML5 canvas.</canvas><br />
</div>
<div >
Color <select id="colorSelector" name="color" onchange="chosenColor();">
<option selected="selected" value="#000000">Black</option>
<option value="#0000FF">Blue</option>
<option value="#FF0000">Red</option>
<option value="#FFA500">Orange</option>
<option value="#FFFF00">Yellow</option>
<option value="#FFC0CB">Pink</option>
<option value="#808080">Gray</option>
<option value="#008000">Green</option>
</select>
Size <select id="sizeSelector" name="color" onchange="chosenSize();">
<option value="100">10</option>
<option value="90">9</option>
<option value="80">8</option>
<option value="70">7</option>
<option value="60">6</option>
<option value="50">5</option>
<option value="40">4</option>
<option value="30">3</option>
<option selected="selected" value="20">2</option>
<option value="10">1</option>
</select>
<p> Please click in the canvas below to draw a circle of your chosen color and size</p>
</div>
</section>
</body>
</html>
Kod:
"use strict";
window.onload = function() {
canvasText();
}
//draw circle at the cordinates of the mouse
function UpdateInfo (event) {
var pageX = event.pageX;
var pageY = event.pageY-75;
var si=document.getElementById("sizeSelector");
var strSize = si.options[si.selectedIndex].value;
drawCircle(pageX,pageY,strSize);
}
//draw circle function
function drawCircle(x,y,si){
si=chosenSize();
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.moveTo(x, y);
ctx.beginPath();
ctx.arc(x,y,si,0,Math.PI*2,false);
ctx.closePath();
ctx.strokeStyle = chosenColor();
ctx.fillStyle= chosenColor();
ctx.stroke();
ctx.fill();
//clear the canvas by clicking clear
document.getElementById('clear').onclick = function() {
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.clearRect(0, 0, c.width, c.height);
ctx.restore();
}
}
//choose drawing color function
function chosenColor(){
var co=document.getElementById("colorSelector");
var strColor = co.options[co.selectedIndex].value;
return strColor;
}
//choose drawing size function
function chosenSize(){
var si=document.getElementById("sizeSelector");
var strSize = si.options[si.selectedIndex].value;
return strSize;
}
//canvas text b4 drawing
function canvasText(){
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="18px sans-serif";
ctx.fillText("Please click to draw a circle or circles", 60, 200);
}
|
|
|
|
|
|
Markerad som löst av swingman #2 |
|
Forumvärd
Registrerad: 2001-06-14
Ort: Helsingborg
Inlägg: 8 495
Lösningar: 535 |
du få spara ner canvas.toDataURL() till en plats i localstorage och vid onload så få du vid onload på bilden sätta dess src path till den variablen ifrån localstorage
det du behöver (indentera din kod snälla) är en spara metod: Kod:
window.localStorage[storageName] = canvas.toDataURL() sen en metod som skall köras vid onload: Kod:
var loadCanvas = function(){
var img = new Image(),
ctx = canvas.getContext('2d')
img.src = window.localStorage[storageName];
img.onload = function(){
ctx.drawImage(img, 0, 0);
};
}
__________________
"det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck |
|
|
|
|
|
#3 |
|
Medlem
Registrerad: 2006-01-15
Inlägg: 86
Lösningar: 0 |
voigtann1: Ursäkta att jag hade ostrukturerad kod...ska göra bättre nästa gång. Det är kanske självklart var eller hur jag ska anropa metoden men jag har inte lyckats med ditt förslag. Skulle du kunna även avslöja hur dina fina kod ska anropas. Är det vid body onload i html eller var i javascripten. Hade gärna haft något som heter onupdate in javascript men vad jag vet finns det inte.
|
|
|
|
|
|
#4 |
|
Forumvärd
Registrerad: 2001-06-14
Ort: Helsingborg
Inlägg: 8 495
Lösningar: 535 |
Om du har något i din localstorage så vill du ju ladda in den när onload körs, metoden loadCanvas skall köras vid en onload (men variablen canvas måste finnas annars kör document.getElementById igen), sen vill du ju bara uppdatera localstorage med canvas datan.
Du ha en hel del variabler som du glömmer sätta var på och då hamnar dom också på window objektet, normalt vill du nog inte ha för mycket i window objektet (då det är enkelt att skriva över dom av vem som helst). Lite andra tips är: Kod:
ctx.strokeStyle = chosenColor(); ctx.fillStyle = chosenColor();
__________________
"det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck |
|
|
|
|
|
#5 |
|
Medlem
Registrerad: 2006-01-15
Inlägg: 86
Lösningar: 0 |
Hej Voigtann1, Jag är en nybörjare i det här programmering så det är därför det är ganska dålig kod. Jag ska tänka på dina tips och jag är glad att jag få hjälp att utvecklas på detta forum. Jag har provat att anropa din kod på lite olika sätt men jag lyckas inte få det att fungera. När jag uppdaterar sidan så får jag inte den cirkeln som jag har ritat på sidan. Skulle du kunna fixa en sådan där jsfiddle och visa hur du anropa koden. När jag ahr läst på så verkar det som man ska ha en setItem och getItem på localstorage. detta ingår inte i din kod förslag. ska det funka ändå?
Till ex. // Put the object into storage localStorage.setItem('testObject', JSON.stringify(testObject)); // Retrieve the object from storage var retrievedObject = localStorage.getItem('testObject'); |
|
|
|
|
|
#6 |
|
Forumvärd
Registrerad: 2001-06-14
Ort: Helsingborg
Inlägg: 8 495
Lösningar: 535 |
exemplet finns ju redan:
Kod:
window.localStorage[storageName] = canvas.toDataURL() Kod:
var storageName = 'testObject'; Kod:
window.localStorage.testObject = canvas.toDataURL(); ovan exempel med setItem är samma sak som koden i mitt exempel (du vill inte spara undan datan som JSON då det inte är ett JSON). Vad har du försökt med min kod? Lägg du upp en jsfiddle/jsbin exempel istället för att man bara ge dig svar på en uppgift du borde lösa med hjälp av matrialet din lärare har tilldelat dig.
__________________
"det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck |
|
|
|
|
|
#7 |
|
Medlem
Registrerad: 2006-01-15
Inlägg: 86
Lösningar: 0 |
Hej!
Jag förstår att det är en lätt grej att fixa men jag har lite problem. Det är en ganska stor uppgift som jag har nästan löst klart och det här med localStorage är bara en av kraven. Tack för den hjälp du har gett mig. Jag har gjort en jsFiddle om du har lust kan du titta på hur jag försöker anropa localStorage. jsfiddle:http://jsfiddle.net/ENy85/ |
|
|
|
|
|
#8 | |
|
Forumvärd
Registrerad: 2001-06-14
Ort: Helsingborg
Inlägg: 8 495
Lösningar: 535 |
läs mitt senaste inlägg, om du kollar i din fellogg så få du:
Citat:
Kod:
function drawCircle(x,y,si){
var x,y;
var si=chosenSize();
....
jag hade hellre kört: Kod:
function drawCircle(x,y){
var si=chosenSize();
....
sen behöver du ju inte ha onchange event på dina dropdown då du inte använder det ändå förrän vid onclick du saknar också att du spara ner datan i din localstorage.
__________________
"det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck |
|
|
|
|
|
|
#9 |
|
Medlem
Registrerad: 2006-01-15
Inlägg: 86
Lösningar: 0 |
Äntligen fick jag till det med localStorage. Behövde tänka till lite... inte så svårt men har just fått ett litet barn hem som inte tillåter mig lägga ner så mycket tid på att studera. Tack för hjälpen.
|
|
|
|
![]() |
| Trådverktyg | |
| Visningsalternativ | |
|
|