Javascript onkeypress更改图像
我有这个功能:Javascript onkeypress更改图像,javascript,image,preload,onkeypress,Javascript,Image,Preload,Onkeypress,我有这个功能: <script type="text/javascript"> function preloadimages(arr){ var newimages=[], loadedimages=0 var postaction=function(){} var arr=(typeof arr!="object")? [arr] : arr function imageloadpost(){ loadedimages++ if (loadedimages==ar
<script type="text/javascript">
function preloadimages(arr){
var newimages=[], loadedimages=0
var postaction=function(){}
var arr=(typeof arr!="object")? [arr] : arr
function imageloadpost(){
loadedimages++
if (loadedimages==arr.length){
postaction(newimages)
}
}
for (var i=0; i<arr.length; i++){
newimages[i]=new Image()
newimages[i].src=arr[i]
newimages[i].onload=function(){
imageloadpost()
}
newimages[i].onerror=function(){
imageloadpost()
}
}
return { //return blank object with done() method
done:function(f){
postaction=f || postaction
}
}
}
preloadimages(['images/image1.jpg','images/image2.jpg','images/image3.jpg']).done(function(images){
})
</script>
这是唯一的工作,但我改变了一些东西,我现在不记得了。
我使用此功能通过onkeypress事件更改键盘上的图像。有什么建议吗
preloadimages(['images/image1.jpg','images/image2.jpg','images/image3.jpg']
根据您的preload images
方法,图像位于目录images/
但是,在您的
changeIm
方法中,您正在执行以下操作:
document.getElementById('imageChange').src = 'image3.jpg'; // (missing directory)
// Solution: prefix your URLs with "images/":
document.getElementById('imageChange').src = 'images/image3.jpg';
在此过程中,请使用jQuery轻松实现跨浏览器事件处理方法:
function changeIm(event) {
var code = event.which
, image
, directory = 'images/';
if (code == 49 || code == 97) {
image = 'image1.jpg';
} else if (code == 50 || code == 98) {
iamge = 'image2.jpg';
} else {
image = 'image3.jpg';
}
$('#imageChange').attr('src', directory + image);
}
$('#changeImgInput').keypress(changeIm);
<input size="30" type="text" id="changeImgInput" />
功能更改im(事件){
var code=event.which
,图像
,目录='images/';
如果(代码==49 | |代码==97){
image='image1.jpg';
}否则如果(代码==50 | |代码==98){
iamge='image2.jpg';
}否则{
image='image3.jpg';
}
$('#imageChange').attr('src',目录+图像);
}
$('changeImgInput')。按键(changeIm);
根据您的preload images
方法,图像位于目录images/
但是,在您的
changeIm
方法中,您正在执行以下操作:
document.getElementById('imageChange').src = 'image3.jpg'; // (missing directory)
// Solution: prefix your URLs with "images/":
document.getElementById('imageChange').src = 'images/image3.jpg';
在此过程中,请使用jQuery轻松实现跨浏览器事件处理方法:
function changeIm(event) {
var code = event.which
, image
, directory = 'images/';
if (code == 49 || code == 97) {
image = 'image1.jpg';
} else if (code == 50 || code == 98) {
iamge = 'image2.jpg';
} else {
image = 'image3.jpg';
}
$('#imageChange').attr('src', directory + image);
}
$('#changeImgInput').keypress(changeIm);
<input size="30" type="text" id="changeImgInput" />
功能更改im(事件){
var code=event.which
,图像
,目录='images/';
如果(代码==49 | |代码==97){
image='image1.jpg';
}否则如果(代码==50 | |代码==98){
iamge='image2.jpg';
}否则{
image='image3.jpg';
}
$('#imageChange').attr('src',目录+图像);
}
$('changeImgInput')。按键(changeIm);
您不需要在更改的图像前面加上“images/”前缀吗
您不需要在更改的图像前面加上“images/”前缀吗
您有权这样做,但我想从预加载功能而不是从服务器中提取图像。这就是为什么我只使用图像的名称。如果在changeIm函数中使用根目录,则不需要预加载函数。@f1delak1浏览器应正确缓存图像。如果在文档中加载相同的图像10倍,浏览器应该只请求文件一次(除非标题另有说明)。因为我不太懂。是否使用预加载函数,如果我使用图像的根路径?您已经从
images/image1.jpg
等预加载了图像。在当前函数中,您尝试从image1.png
加载图像,这是一个不同的路径。由于您当前的方法不起作用,我假设文件不存在于image1.jpg
。因此,您必须在图像前面加上images/
。您有权这样做,但我希望从预加载功能而不是从服务器中提取图像。这就是为什么我只使用图像的名称。如果在changeIm函数中使用根目录,则不需要预加载函数。@f1delak1浏览器应正确缓存图像。如果在文档中加载相同的图像10倍,浏览器应该只请求文件一次(除非标题另有说明)。因为我不太懂。是否使用预加载函数,如果我使用图像的根路径?您已经从images/image1.jpg
等预加载了图像。在当前函数中,您尝试从image1.png
加载图像,这是一个不同的路径。由于您当前的方法不起作用,我假设文件不存在于image1.jpg
。因此,必须在图像前面加上images/
。
function changeIm(event) {
var code = event.which
, image
, directory = 'images/';
if (code == 49 || code == 97) {
image = 'image1.jpg';
} else if (code == 50 || code == 98) {
iamge = 'image2.jpg';
} else {
image = 'image3.jpg';
}
$('#imageChange').attr('src', directory + image);
}
$('#changeImgInput').keypress(changeIm);
<input size="30" type="text" id="changeImgInput" />
document.getElementById('imageChange').src='images/image2.jpg';