admin管理员组文章数量:1202790
I'm trying to clone an image in javascript, bud without loading a new one.
Normally new browsers will load an image once and there are several ways to use that image again.
The problem is that when I test it in IE 6 the image will request a new image from the server.
Anyone how has some info on how to do this in older browsers?
3 methods that not work:
<html>
<head>
<title>My Image Cloning</title>
<script type="text/javascript">
sourceImage = new Image();
sourceImage.src = "myImage.png";
function cloneImageA () {
imageA = new Image();
imageA.src = sourceImage.src;
document.getElementById("content").appendChild(imageA);
}
function cloneImageB () {
imageB = sourceImage.cloneNode(true);
document.getElementById("content").appendChild(imageB);
}
function cloneImageC()
{
var HTML = '<img src="' + sourceImage.src + '" alt="" />';
document.getElementById("content").innerHTML += HTML;
}
</script>
</head>
<body>
<div id="controle">
<button onclick="cloneImageA();">Clone method A</button>
<button onclick="cloneImageB();">Clone method B</button>
<button onclick="cloneImageC();">Clone method C</button>
</div>
<div id="content">
Images:<br>
</div>
</body>
Solution
Added cache-headers server-side with a simple .htaccess file in the directory of the image(s):
/img/.htaccess
Header unset Pragma
Header set Cache-Control "public, max-age=3600, must-revalidate"
All of the above javascript method's will use the image loaded if the cache-headers are set.
I'm trying to clone an image in javascript, bud without loading a new one.
Normally new browsers will load an image once and there are several ways to use that image again.
The problem is that when I test it in IE 6 the image will request a new image from the server.
Anyone how has some info on how to do this in older browsers?
3 methods that not work:
<html>
<head>
<title>My Image Cloning</title>
<script type="text/javascript">
sourceImage = new Image();
sourceImage.src = "myImage.png";
function cloneImageA () {
imageA = new Image();
imageA.src = sourceImage.src;
document.getElementById("content").appendChild(imageA);
}
function cloneImageB () {
imageB = sourceImage.cloneNode(true);
document.getElementById("content").appendChild(imageB);
}
function cloneImageC()
{
var HTML = '<img src="' + sourceImage.src + '" alt="" />';
document.getElementById("content").innerHTML += HTML;
}
</script>
</head>
<body>
<div id="controle">
<button onclick="cloneImageA();">Clone method A</button>
<button onclick="cloneImageB();">Clone method B</button>
<button onclick="cloneImageC();">Clone method C</button>
</div>
<div id="content">
Images:<br>
</div>
</body>
Solution
Added cache-headers server-side with a simple .htaccess file in the directory of the image(s):
/img/.htaccess
Header unset Pragma
Header set Cache-Control "public, max-age=3600, must-revalidate"
All of the above javascript method's will use the image loaded if the cache-headers are set.
Share Improve this question edited Oct 31, 2012 at 16:31 jam 3,6885 gold badges35 silver badges50 bronze badges asked Apr 17, 2011 at 17:05 Wilco WaaijerWilco Waaijer 4321 gold badge4 silver badges12 bronze badges 5- 5 Why in the world are you testing in IE 6? – Wayne Commented Apr 17, 2011 at 17:12
- @Iwburk : wild guess, don't shoot me : it's a prerequisite. – Peter Commented Apr 17, 2011 at 17:33
- @lwburk because it would help to get server requests down. People are still using older browsers no matter what. – Wilco Waaijer Commented Apr 17, 2011 at 18:32
- 2 You could try discouraging people to use IE6 by showing some box on the start page advising them to upgrade. Something like: "this site may not work as expected in your browser. Please upgrade to ... etc." – KooiInc Commented Apr 17, 2011 at 18:52
- 2 @Kooilnc : Good point, I will when there is no other solution – Wilco Waaijer Commented Apr 18, 2011 at 7:33
2 Answers
Reset to default 12Afaik the default browser behavior is to cache images. So something like this should work the way you want:
var sourceImage = document.createElement('img'),
imgContainer = document.getElementById("content");
sourceImage.src = "[some img url]";
imgContainer.appendChild(sourceImage);
function cloneImg(){
imgContainer.appendChild(sourceImage.cloneNode(true));
}
It's all pretty sop, so it should run in IE6 too (I don't have it, so can't test that). See it in action
Furthermore, you may want to check the cache setting of your IE6 browser. I remember from the not so good old days with IE<8 that I sometimes reverted to setting the cache to refresh "every time you load the page" (or someting like that).
javascript has provisions for this build in. here is code modified from Danny Goodman's Javascript Bible 2nd Ed p.498,500 for cacheing/preloading an image,
<img src='/images/someotherimage1.png' id='img1'>
<img src='/images/someotherimage2.png' id='img2'>
<img src='/images/someotherimage3.png' id='img3'>
<script type="text/javascript">
function assignall(numImages, x, y) {
var img = new Image(x, y);
img.src = '/images/someimage.png';
var x;
for (x=1; x <= numImages; x++) {
document.getElementById('img'+x).src = img.src;
}
}
assignall(3); //do it.
</script>
you can always use an array if you have a number of images to work with.
var img = new Array();
function initallimages(numImages, x, y) {
var x;
for (x=1; x <= numImages; x++) {
img['img' + x] = new Image(x,y);
img['img' + x].src = '/images/someimage.png';
}
}
function assignallimages(numImages) {
var x;
for (x=1; x <= numImages; x++) {
document.getElementById('img' + x).src = img['img'+x]['img' + x].src;
}
}
initallimages(3, 320, 240);
assignallimages(3);
本文标签: How can i clone an image in javascriptStack Overflow
版权声明:本文标题:How can i clone an image in javascript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738657957a2105249.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论