缓存数据:网址图片未加载到网页

时间:2015-11-27 04:59:15

标签: javascript html caching local-storage

我制作了这段代码来从页面中获取图像,将它们转换为数据:url(又是什么... base64编码的字符串),然后保存到localStorage中。然后,当重新加载页面时,它应该从localstorage加载图像,并使用data:url image设置现在为空的图像占位符。

现在问题是图片无法加载,如果您检查数据的尺寸:url图像,当它最初为40x40时为300x150。

以下是代码:

var isChached, // Checks is the page's images have been chached into localStorage
    isChangesd;     // Checks if any images have been deleted or added to the
    var img = [],  // Used for loading from saved. img[] holds data:url image versions of the...
    src = [],      // ...images in src[]
    saved = [],    // All images that are to be saved are placed here
    add = [],      // New images are placed here
    rem = [];      // Images to be removed are placed here
    var cnv = document.createElement("canvas");
    ctx = cnv.getContext("2d");

  if (window.localStorage) {
    // Base Object
    function Saver (width,height,path) {
      this.width = width;
      this.height = height;
      this.src = path;
    }

    // These fucnctions will help you save, load, and convert the images to data:url
    function save (_str) { // Saves to localStorage. _str is the key to which to save to. _path is the value that you plan on saving
      var str = _str;
      str += "";   // This way even if I input a none string value it is still converted into string
      localStorage.setItem(str,JSON.stringify(saved));
    } // Checks if this image isn't in the saved cache

    function singleLoad(a,b) {

    }

    function loader (_str) { // Loads images from localStorage. _str is the key to be loaded
      var str = _str;
      str += "";   // This way even if I input a none string value it is still converted into string
      var val = JSON.parse(localStorage.getItem(str)); // Save the now loaded and parsed object str into val
      console.log('val '+JSON.stringify(val));
      val.splice(0,1);
      console.log('val2 '+JSON.stringify(val));
      for (var i in val) { // Take loaded information and place it into it's proper position
        img[i] = new Image(val[i].width,val[i].height);
        img[i].src = val[i].src;

        setTimeout(function () {
          var imgs = document.getElementsByTagName("img"); // Get all images
          for (var k = 0; k < imgs.length; k++) {
            if (imgs[i].id == i) { // If the id is equal to the index name of the src[]
              imgs[k].src = val[i].src;
              imgs[k].height = img[i].height;
              imgs[k].width = img[i].width;
              console.log("array: "+imgs[i]+". img[i]"+img[i]);
            }
          }
        },2000);
      }
    }
    function addToAdd(_id,_path) { // Places on-page images into src[]
      var id = _id;
      id += "";   // Makes sure that the id variable is a string
      var path = _path;
      path += ""; // Makes sure that the path variable is a string
      add[id] = new Image();
      add[id].src = path;
      var imgs = document.getElementsByTagName("img");
      console.log(imgs);
      for (var i = 0; i < imgs.length; i++) { // adds width and height attributes
        if (imgs[i].id == id) {
          setDim(add[id],imgs[i].width,imgs[i].height); // Send info to setDim()
        }
      }
    }

    // Not using this
    function apply() { // takes images from img after being loaded and adds them to the page.
      var images = document.getElementsByTagName("img");
      for (var i = 0; i < images.length; i++) { // Check through the page's images
        for (var k in img) { // Check through the img[] where the loaded images are now saved
          if (images[i].id = k) { // Check if the id of the image on the page is
            images[i].width = img[k].width;
            images[i].height = img[k].height;
            images[i].src = img[k].src;
            console.log("source: "+images[i].src);
            console.log("images: "+images[i]+". saved images "+img[k]);
          }
        }
      }
    }

    function setDim(obj,w,h) { // Sets the dimension(width = w; height = h;) for obj (image object)
      obj.width = w;
      obj.height = h;
    }

    function saveToSrc(_id,_path,w,h) { // Places on-page images into src[]
      var id = _id,data;
      id += "";   // Makes sure that the id variable is a string
      var path = _path;
      path += ""; // Makes sure that the path variable is a string
      src[id] = new Image();
      src[id].src = path;
      console.log("src image " + src[id]);
      var imgs = document.getElementsByTagName("img");
      console.log("page images " + imgs);
      for (var i = 0; i < imgs.length; i++) { // adds width and height attributes
        if (imgs[i].id == id) {
          setDim(src[id],imgs[i].width,imgs[i].height); // Send info to setDim()

          src[id].addEventListener("load",function() { // We convert images to data:url
            console.log("saved image " + src);
            ctx.drawImage(src[id],0,0,w,h);
            data = cnv.toDataURL();
            console.log("saved src " + data +" src width and height: "+src[id].width+","+src[id].height);
            saved[id] = new Saver(src[id].width + "px",src[id].height + "px",data);
            console.log("saver array: "+saved[id]);
          })
        }
      }
    }

    function loadToPage(a) {
      var imgs = document.getElementsByTagName("img"); // Get all images. Use this to change image src and dimensions

      for (var i in a) { // Go through the a[] and load all the images inside onto page
        for (var k = 0; k < imgs.length; k++) {
          if (imgs[k].id == i) {
            imgs[k].src = a[i].src;
            imgs[k].height = a[i].height;
            imgs[k].width = a[i].width;
          }
        }
      }
    } 

    // Here you place ID and path/location values into the src[] using the saveToSrc(). You can place the parameters in with quotation marks or without quotation marks
    // **N.B** the location link will have to be changed to it's absolute form so that even if a 'scraper' gets our webpage the links still come to us \o/


    if (localStorage.getItem("cached") == null) { // Check if the "cached" key exists.
      // If it doesn't exist...

      isCached = false;
      localStorage.setItem("cached","true");
    } else {
      // ...If it does exist
      isCached = true;
    }

    if (!isCached) {
      // Now you take images from server and load onto page. And then save them.



      window.onload = function() {

    saveToSrc("1","img/1.png",40,40);
    saveToSrc("2","img/2.png",40,40);
    saveToSrc("3","img/3.png",40,40);
    saveToSrc("4","img/4.png",40,40);
    console.log("src "+src);
    console.log("saved array " + saved);

        loadToPage(src);
        setTimeout(function() {
          save('saved');
        },3000)

      }
    }
    /* Will Be Added Later. Same time as local host */
    else {
      window.onload = function (){
        setTimeout(function() {
          loader("saved");
          apply
        },3000)

      }
    }
  }

我对javascript很新(今年6月开始使用javascript,或者是May。反正...)所以请放松术语。

总结:图像保存正确(-ish),未加载,图像尺寸保存错误

0 个答案:

没有答案