如何让用户自定义背景图像?

时间:2013-02-03 22:40:34

标签: javascript css image background skinning

当用户能够自定义网页外观时,许多网站现在具有“主题”功能。有时它只是一组固定的主题,但有时人们可以自由选择他们想要的任何风格 - 例如,他们可以设置页面背景的任何颜色。

我想更进一步 - 让他们也选择背景图像。流程非常简单:用户上传文件(通过<input type="file" />),然后此文件变为背景图片 - 但仅限此用户。

我在网上找不到任何有关此功能的信息,但我不知道该怎么做。

我想的其他事情是,如果用户选择了背景,我可以使用HTML5 localstorage在访问者访问该页面时每次都会显示该背景。

2 个答案:

答案 0 :(得分:2)

以下是概念验证(主要基于MDN FileReader doc page + this answer处提供的代码):

<强> HTML

<input id="test" type="file" onchange="loadImageFile(this)" />

JS 没有换行(头)模式

$(switchBackground);
var oFReader = new FileReader(),
    rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

oFReader.onload = function(oFREvent) {
    localStorage.setItem('b', oFREvent.target.result);
    switchBackground();
};

function switchBackground() {
  var backgroundImage = localStorage.getItem('b');
  if (backgroundImage) {
    $('body').css('background-image', 'url(' + backgroundImage + ')');    
  } 
}

function loadImageFile(testEl) {
  if (! testEl.files.length) { return; }
  var oFile = testEl.files[0];
  if (!rFilter.test(oFile.type)) { alert("You must select a valid image file!"); return; }
  oFReader.readAsDataURL(oFile);
}

这是一个working demo,在最新的Firefox和Chrome版本中进行了检查。看起来工作正常,至少。 )

答案 1 :(得分:0)

这是解决此问题的快速解决方案。

custom-background.js是一个轻量级的jQuery插件,允许用户更改网站的默认背景,并将选择的背景保存到本地存储。这个插件可以很容易地添加到任何网站或网络应用程序,而不会影响网站的性能。

您可以从这里下载并查看代码 https://github.com/CybrSys/custom-background.js