Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onkeypress更改图像_Javascript_Image_Preload_Onkeypress - Fatal编程技术网

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';