Изменение imsg src от одного к другому показывает «щелчок» - PullRequest
0 голосов
/ 23 июня 2011

У меня есть изображение с изображением. Например:

<img id='imageWord' src=images\Card.png onclick='changeImage();'>

Когда пользователь нажимает на него , я хочу сделать fadeOut , изменить его источник на другое изображение, а затем fadeIn .

function changeImage()
{
    $('#ImageWord').animate({opacity:0})
    .queue(function(){
         $(this).attr("src", '');
         replaceImage('#ImageWord', 'images\newImage.png');
         $(this).dequeue()
    })
    .animate({opacity:1}); 
}

var MAX_HEIGHT = 260;
var MAX_WIDTH = 260;

    function keepAspectRatio(temp, target, url)
    {
        $(target).removeAttr('style');

        // Get height and width once loaded
        var realHeight = temp.height;
        var realWidth = temp.width;

        // Get how much to divide by (1 if image fits in dimensions)
        // Get rid of ", 1" if you just want everything to be either
        // MAX_HEIGHT tall or MAX_WIDTH wide
        var factor = Math.max(realHeight/MAX_HEIGHT, realWidth/MAX_WIDTH, 1);
        realHeight /= factor;
        realWidth /= factor;

        // Set the target image's source, height and width
        $(target).attr("src", url).css({height: realHeight, width: realWidth});

        if (realWidth != MAX_WIDTH)
        {
            var offsetX = (MAX_WIDTH - realWidth ) / 2;
            var sum = parseFloat($(target).css("left").replace("px", "")) + offsetX;
            $(target).css("left", sum);
        }
        if (realHeight != MAX_HEIGHT)
        {
            var offsetY = (MAX_HEIGHT - realHeight) / 2;
            var sum = parseFloat($(target).css("top").replace("px", "")) + offsetY;
            $(target).css("top", sum);
        }
    }

    function replaceImage($target, url) {
      $("<img>").load(function() {
        keepAspectRatio(this, $target, url);
      }).attr("src", url);
    }

Иногда я вижу следующее:

  1. Card.png fadeOut.
  2. Нет изображения (0,1 секунды)
  3. Card.png снова (0,1 секунды).
  4. newImage.png fadeIn.

Я хочу избежать шага 3.

Любой совет?

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Предположим, у вас есть более 2 изображений для показа (в виде слайд-шоу). Вы можете попробовать использовать два изображения, одно поверх другого.Одним из них является изображение, которое вы на самом деле отображаете, а другим - это то, которое вам нужно показать при первом исчезновении.Таким образом, вы можете исчезнуть первым, показывая нижний.Когда анимация исчезновения заканчивается, вы помещаете ее (обратный вызов) под другую и меняете ее src.Там не будет мерцания, так как вы загружаете его в фоновом режиме.Если у вас есть только 2 изображения, то затухания достаточно для циклического переключения между изображениями.

Другое решение, которое может решить вашу проблему, - это предварительно загрузить изображения и сохранить их в кеше.Если я не ошибаюсь, это может решить проблему.

Извините, я не предоставляю код, но я на работе ... в любом случае, если вам нужно больше деталей, скажите мне.

0 голосов
/ 23 июня 2011

Как показывает этот пример, вы можете поместить все ваши изображения при запуске на дисплей none. Чем использовать JQuery FadeIn и FadeOut, чтобы показать правильное изображение. Все, что вам нужно, это поместить их в положение: относительный div и определить их как положение: абсолютный:

<div class="slideshow" style="position: relative; ">
    <img src="http://cloud.github.com/downloads/malsup/cycle/beach1.jpg" width="200" height="200" style="position: absolute; top: 0px; left: 0px; width: 200px; height: 200px; z-index: 5; opacity: 0; display: none; ">
    <img src="http://cloud.github.com/downloads/malsup/cycle/beach2.jpg" width="200" height="200" style="position: absolute; top: 0px; left: 0px; width: 200px; height: 200px; z-index: 5; opacity: 0; display: none; ">
    <img src="http://cloud.github.com/downloads/malsup/cycle/beach3.jpg" width="200" height="200" style="position: absolute; z-index: 6; top: 0px; left: 0px; display: block; width: 200px; height: 200px; opacity: 1; ">
    <img src="http://cloud.github.com/downloads/malsup/cycle/beach4.jpg" width="200" height="200" style="position: absolute; top: 0px; left: 0px; width: 200px; height: 200px; z-index: 5; opacity: 0; display: none; ">
    <img src="http://cloud.github.com/downloads/malsup/cycle/beach5.jpg" width="200" height="200" style="position: absolute; top: 0px; left: 0px; width: 200px; height: 200px; z-index: 5; opacity: 0; display: none; ">
</div>

http://jquery.malsup.com/cycle/basic.html

...