jQuery слайд-шоу изображений: подписи не прозрачны в IE

Я создал слайд-шоу изображений с помощью jQuery. Изображения плавно перетекают друг в друга. Есть подписи к каждому изображению, каждое внутри своего div. По мере того, как изображение исчезает, соответствующая подпись скользит вверх. Подпись должна быть прозрачной, и это работает во всех браузерах (с которыми я ее тестировал), кроме IE.

Веб-сайт можно найти по адресу http://mtsoc.enfotext.com.

JavaScript (для одного из слайд-шоу):

function slideShow() {

    //Set the opacity of all images to 0
    $('#mainfeature a').css({
        opacity: 0.0
    });

    //Get the first image and display it (set it to full opacity)
    $('#mainfeature a:first').css({
        opacity: 1.0
    });

    //Set the caption background to semi-transparent
    $('#mainfeature .caption').css({
        opacity: 0.7
    });

    //Call the gallery function to run the slideshow
    setInterval('main_gallery()', 8000);
}


function main_gallery() {

    //if no IMGs have the show class, grab the first image
    var current = ($('#mainfeature a.show') ? $('#mainfeature a.show') : $('#mainfeature a:first'));

    //Get next image, if it reached the end of the slideshow, rotate it back to the first image
    var next = ((current.next().length) ? ((current.next().hasClass('caption')) ? $('#mainfeature a:first') : current.next()) : $('#mainfeature a:first'));

    //Set the fade in effect for the next image, show class has higher z-index
    next.css({
        opacity: 0.0
    })
        .addClass('show')
        .animate({
        opacity: 1.0
    }, 1000);

    //Hide the current image
    current.animate({
        opacity: 0.0
    }, 1000)
        .removeClass('show');

    //Set the opacity to 0 and height to 1px
    $('#mainfeature .caption').animate({
        opacity: 0.0
    }, {
        queue: false,
        duration: 0
    }).animate({
        height: '1px'
    }, {
        queue: true,
        duration: 300
    });

    //Animate the caption, opacity to 0.7 and heigth to 100px, a slide up effect
    $('#mainfeature .caption').animate({
        opacity: 0.7
    }, 100).animate({
        height: '50px'
    }, 500);
}

CSS это:

#mainfeature.feature {
    color: #fff;
    display: block;
    position: absolute;
    overflow: hidden;
    z-index: 1;
}

#mainfeature.caption {
    background: #333;
    padding: 10px;
    position: absolute;
    left: 0;
    bottom: 0;
    z-index: 600;
    height: 50px;
    opacity: 0.7;
    filter: alpha(opacity = 70);
    width: 575px;
} 

HTML-код:

<div id="mainfeature">
    <a href="#" class="show feature">
        <img src="<?php bloginfo('template_directory'); ?>/images/12.jpg" />
        <div class="caption">
            <span class="tag">Spring Show</span>
            <span class="title">A Funny Thing Happened on the Way to the Forum</span>
            <span class="detail">Through June 15</span>
        </div>
    </a>
... more slides...
</div>

В любом случае, длинный вопрос, много информации. Кто-нибудь знает, почему подписи не прозрачны в IE?

Спасибо


person Michael Willmott    schedule 04.07.2009    source источник


Ответы (4)


IE не реализует свойство CSS фильтра. Вам нужно будет использовать что-то вроде filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); для прозрачности в IE. В качестве альтернативы вы можете использовать фоновое изображение PNG и использовать JS для применения прозрачности. Там много вариантов.

person Pete    schedule 04.07.2009

Кажется, проблема заключается в вложенных настройках непрозрачности.

Если вы просматриваете дом с помощью панели инструментов Dev, вы можете добиться правильного вида, удалив

filter:alpha(opacity=100) 

из тега a.feature (это необходимо сделать, пока якорь виден).

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

//Set the fade in effect for the next image, show class has higher z-index
next.css({opacity: 0.0})
.addClass('show')
.animate({opacity: 1.0}, 1000, null, function(){ next.removeAttr("style"); });

Кроме того, вы можете рассмотреть возможность использования функций fadeIn/fadeOut, так как они предназначены для правильного применения непрозрачности в диапазоне.

person Joel    schedule 04.07.2009

Достойный кросс-браузерный метод установки непрозрачности в jQuery — использовать .fadeIn/.fadeOut/.fadeTo.

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

Надеюсь, это поможет.

person Chris Nicol    schedule 04.07.2009

Я обнаружил, что если я скрывал элемент, у которого был класс с правилами прозрачности CSS, мне приходилось (конечно, только для IE) повторно устанавливать правило фильтра CSS, когда я снова показывал элемент.

Это сработало для меня:

$(".selected").find(".overlay").css("filter", "alpha(opacity=80)").fadeIn(500);
person jjon    schedule 25.11.2009