Динамическое изменение фонового изображения CSS

То, что я ищу, - это способ заставить мой тег заголовка HTML менять фоновые изображения каждые несколько секунд. Любые решения приветствуются, если это не сложно.

У меня есть этот код прямо сейчас, а также ссылки на JQuery:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

$(function() {
    var header = $(‘.mainHeader);
    var backgrounds = new Array(
        ‘url(img/rainbow.jpg),
        ‘url(img/chickens_on_grass.jpg)
        ‘url(img/cattle_on_pasture.jpg)
        ‘url(img/csa_bundle.jpg)
    );
    var current = 0;

    function nextBackground() {
        header.css(‘background,backgrounds[current = ++current % backgrounds.length]);
        setTimeout(nextBackground, 10000);
    }

    setTimeout(nextBackground, 10000);
    header.css(‘background, backgrounds[0]);
});

Мой HTML-заголовок:

<header class="mainHeader"></header>

И CSS:

.mainHeader {
    background: no-repeat center bottom scroll; 
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    min-height: 150px;
    padding-top: 2%;
    font-size: 100%;
}

Прямо сейчас у меня теперь есть фоновое изображение вообще.

Ответ 1

<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function(){
var header = $('body');

var backgrounds = new Array(
    'url(http://placekitten.com/100)'
  , 'url(http://placekitten.com/200)'
  , 'url(http://placekitten.com/300)'
  , 'url(http://placekitten.com/400)'
);

var current = 0;

function nextBackground() {
    current++;
    current = current % backgrounds.length;
    header.css('background-image', backgrounds[current]);
}
setInterval(nextBackground, 1000);

header.css('background-image', backgrounds[0]);
});
</script>
</head>
<body>
<header></header>
</body>
</html>

Ответ 2

Сделал несколько поправок к вашему коду

DEMO: http://jsfiddle.net/p77KW/

var header = $('body');

var backgrounds = new Array(
    'url(http://placekitten.com/100)'
  , 'url(http://placekitten.com/200)'
  , 'url(http://placekitten.com/300)'
  , 'url(http://placekitten.com/400)'
);

var current = 0;

function nextBackground() {
    current++;
    current = current % backgrounds.length;
    header.css('background-image', backgrounds[current]);
}
setInterval(nextBackground, 1000);

header.css('background-image', backgrounds[0]);

Самые большие изменения (как отмечалось в других комментариях) заключается в том, что вы должны использовать апостроф ** '** s, а не эти фанковые открытые и закрытые одиночные кавычки и что ваш массив неверен.

С этими исправлениями я упростил несколько вещей:

  • Приращение current затем возьмем модуль (я знаю, что это в основном то, что вы сделали, но насколько проще это отлаживать ;))
  • Цель background-image напрямую
  • Используется setInterval() вместо двойного вызова setTimeout

Ответ 3

Вы можете получить эту же технику с помощью HTML/CSS. Только 1. помещая изображения в тег "img" в HTML, окруженный "оберткой div" и устанавливая его в положение: относительная и обертка div img в позицию: абсолютная, Для полноразмерной/полной высоты вы можете использовать проценты или потенциально "фон-размер: обложка" (не отмечены), а затем вызвать анимацию CSS для динамического изменения изображений.

Или 2. вы можете добавить несколько изображений в фон в CSS, разделенных запятыми, применить обложку background-size: cover и снова использовать анимацию CSS для изменения фона.

Здесь пример, а также Mozilla Документация по анимации CSS3

Ответ 4

Вы не можете разграничить строки JavaScript с символами . Вы должны использовать " или '.

Ответ 5

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

Настройка слайд-шоу с tcycle проста и даже может быть выполнена с помощью декларативной разметки, например

<div class="tcycle">
<img src="p1.jpg">
<img src="p2.jpg">
</div>

Трюк может быть donde с использованием css z-index: -1 для div контейнера и установки ширины и высоты до 100%

Домашняя страница для загрузки и проверки других примеров Плагины Malsup jQuery