Как установить целевые изображения, которые должны идти в этом коде - PullRequest
2 голосов
/ 02 марта 2012

У меня есть Java Script, который автоматически серит изображения и выцветает при наведении курсора мыши!

Я добавил код ниже в заголовок моей HTML-страницы! Но это не работает. Я пытался изменить целевые изображения.

Есть ли что-нибудь делать в HTML или CSS после добавления этого кода.

Как должны работать изображения

<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">

// On window load. This waits until images have loaded which is essential
$(window).load(function(){

    // Fade in images so there isn't a color "pop" document load and then on window load
    $(".menu img").fadeIn(500);

    // clone image
    $('.menu img').each(function(){
        var el = $(this);
        el.css({"position":"absolute"}).wrap("<div class='img_wrapper' style='display: inline-block'>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore(el).queue(function(){
            var el = $(this);
            el.parent().css({"width":this.width,"height":this.height});
            el.dequeue();
        });
        this.src = grayscale(this.src);
    });

    // Fade image 
    $('.menu img').mouseover(function(){
        $(this).parent().find('img:first').stop().animate({opacity:1}, 1000);
    })
    $('.img_grayscale').mouseout(function(){
        $(this).stop().animate({opacity:0}, 1000);
    });     
});

// Grayscale w canvas method
function grayscale(src){
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    var imgObj = new Image();
    imgObj.src = src;
    canvas.width = imgObj.width;
    canvas.height = imgObj.height; 
    ctx.drawImage(imgObj, 0, 0); 
    var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
    for(var y = 0; y < imgPixels.height; y++){
        for(var x = 0; x < imgPixels.width; x++){
            var i = (y * 4) * imgPixels.width + x * 4;
            var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
            imgPixels.data[i] = avg; 
            imgPixels.data[i + 1] = avg; 
            imgPixels.data[i + 2] = avg;
        }
    }
    ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
    return canvas.toDataURL();
}

1 Ответ

2 голосов
/ 02 марта 2012

Как видите - он отлично работает http://jsfiddle.net/8aSmM/

Проблема может возникнуть из-за:

  1. Ваш браузер не поддерживает canvas
  2. Ваши изображения загружаются с другого домена.Прочитайте это https://developer.mozilla.org/en/Canvas_tutorial/Using_images#Using_images_from_other_domains Изображение в приведенном выше примере взято из jsfiddle.

Хотя вы можете использовать изображения без одобрения CORS на вашем холсте, это портит холст.После того, как холст был испорчен, вы больше не можете извлекать данные обратно из холста.Например, вы больше не можете использовать методы canvas toBlob (), toDataURL () или getImageData ();Это приведет к ошибке безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...