Maison >interface Web >tutoriel CSS >Comment déterminer les dimensions de l'image d'arrière-plan d'une division à l'aide de jQuery ?

Comment déterminer les dimensions de l'image d'arrière-plan d'une division à l'aide de jQuery ?

DDD
DDDoriginal
2025-01-01 04:59:10269parcourir

How to Determine a Div's Background Image Dimensions Using jQuery?

Déterminer les dimensions de l'image d'arrière-plan d'une div dans jQuery

Problème :
Acquérir la largeur et la hauteur d'une div l'image d'arrière-plan utilisant jQuery semble insaisissable. Tentatives conventionnelles comme $('#myDiv').css('background-image').height(); donne l'erreur « pas une fonction ».

Solution :

Heureusement, une solution ingénieuse existe. En tirant parti de la puissance de création d'un nouvel objet Image, on peut connaître les dimensions de l'image même si elles ne sont pas explicitement définies dans le CSS. Voici une version mise à jour du script :

var image_url = $('#something').css('background-image'),
    image;

// Extract the URL without the url() or url("") wrapper
image_url = image_url.match(/^url\("?(.+?)"?\)$/);

// Proceed if the image URL was obtained
if (image_url[1]) {
    image_url = image_url[1];
    // Create a new Image object
    image = new Image();

    // Trigger an event when the image is loaded
    // This ensures we get the actual image dimensions
    $(image).load(function () {
        alert('Width: ' + image.width + '\nHeight: ' + image.height);
    });

    image.src = image_url;
}

Approche améliorée (2018) :

Une solution plus complète est présentée ci-dessous, offrant des fonctionnalités et une gestion des erreurs améliorées :

var getBackgroundImageSize = function(el) {
    // Extract the image URL
    var imageUrl = $(el).css('background-image').match(/^url\(["']?(.+?)["']?\)$/);
    // Create a deferred object
    var dfd = new $.Deferred();

    // Handle existence of image URL
    if (imageUrl) {
        // Create a new Image object
        var image = new Image();
        // Resolve the deferred on load, reject on error
        image.onload = dfd.resolve;
        image.onerror = dfd.reject;
        // Assign the image source
        image.src = imageUrl[1];
    } else {
        // Image not available, reject
        dfd.reject();
    }

    // Return the dimensions if the image loads
    return dfd.then(function() {
        // Return the dimensions as an object
        return { width: this.width, height: this.height };
    });
};

// Sample usage
getBackgroundImageSize(jQuery('#mydiv'))
    .then(function(size) {
        // Success - log the dimensions
        console.log('Image size is: ', size);
    })
    .fail(function() {
        // Error - log failure message
        console.log('Failed to determine image size');
    });

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn