使用 jQuery 加载图像并将其附加到 DOM

IT技术 javascript jquery image
2021-02-10 18:26:53

我正在尝试从给定的链接加载图像

var imgPath = $(imgLink).attr('href');

并将其附加到页面,以便我可以将其插入到图像查看器的给定元素中。即使我无休止地搜索了StackoverflowjQuery文档,我也无法弄清楚。

加载图像后,我想为其设置不同的值,例如宽度、高度等。

更新:

这就是我得到的。我遇到的问题是我无法在img元素上运行 jQuery 函数

function imagePostition(imgLink) {

// Load the image we want to display from the given <a> link       
// Load the image path form the link
var imgPath = $(imgLink).attr('href');

// Add image to html
$('<img src="'+ imgPath +'" class="original">').load(function() {

    $(imgLink).append(this);

    var img = this;

    // Resize the image to the window width
    // http://stackoverflow.com/questions/1143517/jquery-resizing-image

    var maxWidth = $(window).width();       // window width
    var maxHeight = $(window).height();     // window height
    var imgWidth = img.width;               // image width
    var imgHeight = img.height;             // image height
    var ratio = 0;                          // resize ration
    var topPosition = 0;                    // top image position
    var leftPostition = 0;                  // left image postiton

    // calculate image dimension

    if (imgWidth > maxWidth) {
        ratio = imgHeight / imgWidth;
        imgWidth = maxWidth;
        imgHeight = (maxWidth * ratio);
    }
    else if (imgHeight > maxHeight) {
        ratio = imgWidth / imgHeight;
        imgWidth = (maxHeight * ratio);
        imgHeight = maxHeight;
    }

    // calculate image position

    // check if the window is larger than the image
    // y position
    if(maxHeight > imgHeight) {
        topPosition = (maxHeight / 2) - (imgHeight / 2);
    }
    // x position
    if(maxWidth > imgWidth) {
        leftPostition = (maxWidth / 2) - (imgWidth / 2);
    }

    $(imgLink).append(img);

    // Set absolute image position
    img.css("top", topPosition);
    img.css("left", leftPostition);

    // Set image width and height
    img.attr('width', imgWidth);
    img.attr('height', imgHeight);  

    // Add backdrop
    $('body').prepend('<div id="backdrop"></div>');

    // Set backdrop size
    $("#backdrop").css("width", maxWidth);
    $("#backdrop").css("height", maxHeight);

    // reveal image
    img.animate({opacity: 1}, 100)
    img.show()

});

};
6个回答
$('<img src="'+ imgPath +'">').load(function() {
  $(this).width(some).height(some).appendTo('#some_target');
});

如果你想为多个图像做,那么:

function loadImage(path, width, height, target) {
    $('<img src="'+ path +'">').load(function() {
      $(this).width(width).height(height).appendTo(target);
    });
}

利用:

loadImage(imgPath, 800, 800, '#some_target');
在 jQuery 3.x 中使用 .on('load', ...) 代替。(见下面的答案)。
2021-03-22 18:26:53
不再适用于 jQuery 3.x/它崩溃并出现错误:TypeError: e.indexOf is not a function
2021-03-28 18:26:53
如果我想从图像中获取属性,比如它的高度和宽度,我怎样才能得到它?$('<img src="'+ imgPaht +'" class="original">').load(function() { var img = $(this); ...似乎不起作用。
2021-03-30 18:26:53
@sq2..嗨,伙计...检查imgPahtOP的帖子和评论中的大象..谢谢 :)
2021-04-04 18:26:53
我们能不能不要再忽视房间里的大象了——imgPath 拼写错误。谢谢。
2021-04-11 18:26:53

这是我想在将图像附加到页面之前预加载图像时使用的代码。

检查图像是否已经从缓存中加载(对于 IE)也很重要。

    //create image to preload:
    var imgPreload = new Image();
    $(imgPreload).attr({
        src: photoUrl
    });

    //check if the image is already loaded (cached):
    if (imgPreload.complete || imgPreload.readyState === 4) {

        //image loaded:
        //your code here to insert image into page

    } else {
        //go fetch the image:
        $(imgPreload).load(function (response, status, xhr) {
            if (status == 'error') {

                //image could not be loaded:

            } else {

                //image loaded:
                //your code here to insert image into page

            }
        });
    }
var img = new Image();

$(img).load(function(){

  $('.container').append($(this));

}).attr({

  src: someRemoteImage

}).error(function(){
  //do something if image cannot load
});
这将创建和元素。加载它,然后将其附加到 DOM。它每次都对我来说完美无缺。
2021-03-16 18:26:53
在 new 和 Image() 之间需要一个空格;
2021-03-25 18:26:53
jQuery 建议在设置 src api.jquery.com/error之前设置错误处理程序此外 .error() 现在已弃用,因此最好使用 .on("error", ...
2021-04-10 18:26:53

获取图片路径后,尝试以下任一方式

  1. (因为你需要设置更多的 attr 而不仅仅是 src)构建 html 并替换到目标区域

    $('#target_div').html('<img src="'+ imgPaht +'" width=100 height=100 alt="Hello Image" />');
    
  2. 如果更改“SRC”属性,您可能需要添加一些延迟

    setTimeout(function(){///this function fire after 1ms delay
          $('#target_img_tag_id').attr('src',imgPaht);
    }, 1);
    

我想你定义你的形象是这样的:

<img id="image_portrait" src="" alt="chef etat"  width="120" height="135"  />

您可以简单地加载/更新此标签的图像并更改/设置 atts (width,height):

var imagelink;
var height;
var width;
$("#image_portrait").attr("src", imagelink);
$("#image_portrait").attr("width", width);
$("#image_portrait").attr("height", height);