Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2019, 14:21
Новичок на форуме
Отправить личное сообщение для Valeriy__258 Посмотреть профиль Найти все сообщения от Valeriy__258
 
Регистрация: 11.03.2019
Сообщений: 5

Не работает LocalStorage в самой простой функции
Добрый день. Хочу сделать так, чтобы рисунок в паинте(максимально простая программа) сохранялся при закрытии браузера. Я новичок в языках программирования, но нужно сдать по предмету эту работу, а я всё никак не могу понять, что я делаю не так ?
Пробовал разные переменные и кидал localStorage в разные места программы, но ничего не получается.
Кто объяснит профану, где он не прав? >_<

Последний раз редактировалось Valeriy__258, 11.03.2019 в 14:28.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2019, 14:51
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Valeriy__258,
Что такое x, который вы хотите сохранить в localStorage?
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2019, 15:14
Новичок на форуме
Отправить личное сообщение для Valeriy__258 Посмотреть профиль Найти все сообщения от Valeriy__258
 
Регистрация: 11.03.2019
Сообщений: 5

Я не знаю, что за переменная там должна быть(
я хочу сохранить свой рисунок в окне канвас в localStorage, чтобы я закрывал браузер, а потом открывал - а рисунок сохранялся
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2019, 17:48
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<canvas id = 'c1' width='400' height='200'></canvas>
<button id = 'save' >Save</button>
<img id = 'cImg' src = ''>
<script>
var canvas = document.getElementById('c1');
var ctx = canvas.getContext('2d');
var myColor = 'black';
          var img = new Image();
          img.src =  localStorage.getItem('img');
          img.onload = function() {               
                ctx.drawImage(img, 0, 0);
          }
canvas.onmousedown = function() {
   canvas.onmousemove = function(e) {
       var x = e.offsetX,
             y = e.offsetY;
       ctx.fillStyle = myColor;
       ctx.fillRect(x - 5,y - 5,10,10);
   }
   canvas.onmouseup = function() {
      canvas.onmousemove = null;
   }
}
document.querySelector('#save').onclick = function() {
       var imageURI = canvas.toDataURL("image/jpg");
       localStorage.setItem('img',imageURI);
 //      document.querySelector('#cImg').src =  localStorage.getItem('img');
}
</script>

Последний раз редактировалось Dilettante_Pro, 11.03.2019 в 18:33.
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2019, 18:06
Новичок на форуме
Отправить личное сообщение для Valeriy__258 Посмотреть профиль Найти все сообщения от Valeriy__258
 
Регистрация: 11.03.2019
Сообщений: 5

Сообщение от Dilettante_Pro Посмотреть сообщение
<canvas id = 'c1' width='400' height='200'></canvas>
<button id = 'save' >Save</button>
<img id = 'cImg' src = ''>
<script>
var canvas = document.getElementById('c1');
var ctx = canvas.getContext('2d');
var myColor = 'black';
canvas.onmousedown = function() {
   canvas.onmousemove = function(e) {
       var x = e.offsetX,
             y = e.offsetY;
       ctx.fillStyle = myColor;
       ctx.fillRect(x - 5,y - 5,10,10);
   }
   canvas.onmouseup = function() {
      canvas.onmousemove = null;
   }
}
document.querySelector('#save').onclick = function() {
       var imageURI = canvas.toDataURL("image/jpg");
       localStorage.setItem('img',imageURI);
       document.querySelector('#cImg').src =  localStorage.getItem('img');
}
</script>
Круто!
Но мне нужно немного другое(
Нужно, чтобы изображение сохранялось в рабочем поле, т.е. я открыл себе программку в браузере, нарисовал что-то, потом закрыл её, открыл снова, и могу продолжать рисовать на том же рисунке
Ответить с цитированием
  #6 (permalink)  
Старый 11.03.2019, 18:34
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Valeriy__258,
Изменил пример пост #4
Ответить с цитированием
  #7 (permalink)  
Старый 11.03.2019, 19:04
Новичок на форуме
Отправить личное сообщение для Valeriy__258 Посмотреть профиль Найти все сообщения от Valeriy__258
 
Регистрация: 11.03.2019
Сообщений: 5

Сообщение от Dilettante_Pro Посмотреть сообщение
Valeriy__258,
Изменил пример пост #4
Отлично, всё работает! Пытаюсь теперь добавить кнопку очистить через removeItem.
Можно ещё такой вопрос: почему у Вас весь код написан без тегов html, head и body?
Я попробовал раскидать всё в теги, script в head, а всё остальное в body, но код перестал работать(

Последний раз редактировалось Valeriy__258, 11.03.2019 в 19:54.
Ответить с цитированием
  #8 (permalink)  
Старый 11.03.2019, 20:16
Новичок на форуме
Отправить личное сообщение для Valeriy__258 Посмотреть профиль Найти все сообщения от Valeriy__258
 
Регистрация: 11.03.2019
Сообщений: 5

Сообщение от Dilettante_Pro Посмотреть сообщение
Valeriy__258,
Изменил пример пост #4
Всё, добавил кнопку обновить и рамку, и всё работает!
Правда с тегами head и body и с их отсутствием не разобрался.. Наверняка, где-то ошибку сделал, поэтому ничего не работает
Спасибо ещё раз!
Ответить с цитированием
  #9 (permalink)  
Старый 12.03.2019, 10:38
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Valeriy__258
почему у Вас весь код написан без тегов html, head и body?
Потому что здесь песочница умная и сама добавляет чего не хватает - можете посмотреть в консоли.
Вот вариант с html, head, body.
<!DOCTYPE html>
<html>
   <head>
      <script>
         window.addEventListener('load', function () {
            var canvas = document.getElementById('c1');
            var ctx = canvas.getContext('2d');
            var myColor = 'black';
            var img = new Image();
            img.src =  localStorage.getItem('img');
            img.onload = function() {               
                ctx.drawImage(img, 0, 0);
            }
            canvas.onmousedown = function() {
               canvas.onmousemove = function(e) {
                   var x = e.offsetX,
                         y = e.offsetY;
                   ctx.fillStyle = myColor;
                   ctx.fillRect(x - 5,y - 5,10,10);
               }
               canvas.onmouseup = function() {
                   canvas.onmousemove = null;
               }
            }
            document.querySelector('#save').onclick = function() {
                var imageURI = canvas.toDataURL("image/jpg");
                localStorage.setItem('img',imageURI);
            }
         });
      </script>
   </head>
   <body>
      <canvas id = 'c1' width='400' height='200'></canvas>
      <button id = 'save' >Save</button>
   </body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 12.03.2019, 13:33
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Автосохранение %)

<!DOCTYPE html>
<html>

<head>
  <script>
    (function () {
      let canvas = null
      document.addEventListener('DOMContentLoaded', function () {
        canvas = document.getElementById('c1')
        var ctx = canvas.getContext('2d');
        var myColor = 'black';
        let localStorageImage = localStorage.getItem('img')
        console.log('localStorageImage', localStorageImage)
        if (localStorageImage) {
          var img = new Image();
          img.src = localStorageImage;
          img.onload = function () {
            ctx.drawImage(img, 0, 0);
          }
        }
        canvas.onmousedown = function () {
          canvas.onmousemove = function (e) {
            var x = e.offsetX,
              y = e.offsetY;
            ctx.fillStyle = myColor;
            ctx.fillRect(x - 5, y - 5, 10, 10);
          }
          canvas.onmouseup = function () {
            canvas.onmousemove = null;
          }
        }

        document.getElementById('clear').addEventListener('click', function () {
          ctx.clearRect(0, 0, canvas.width, canvas.height);
          localStorage.removeItem('img')
        })
      });
      window.onunload = function () {
        if (canvas) {
          var imageURI = canvas.toDataURL("image/jpg");
          localStorage.setItem('img', imageURI);
        }
        return null
      };
    })()
  </script>
</head>

<body>
  <canvas id='c1' width='400' height='200'></canvas>
  <button id='clear' type='button'>clear</button>
</body>

</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
return в callback функции, вызываемой в loop'е brokenwind Events/DOM/Window 5 25.05.2014 18:46
заменить функцию на функцию с другими параметрами вызовом самой функции рони Общие вопросы Javascript 13 27.03.2014 22:01
Почему происходит проверка до вызова самой функции? wwwboy Общие вопросы Javascript 5 09.12.2011 03:37
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Простой скрипт не работает в Firefox'e... Aik Firefox/Mozilla 2 03.02.2009 22:30