Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2011, 22:55
Аспирант
Отправить личное сообщение для igsavenko Посмотреть профиль Найти все сообщения от igsavenko
 
Регистрация: 15.01.2010
Сообщений: 83

Плавное смещение background
Скажите пожалуйста, как реализовать такое. У body есть background, нужно сделать так что при движении мыши по документу слева направо задний фон смещался справа налево и наоборот. Но если мышь покидает область окна то задний фон плавно восстанавливает свое местоположение по центру. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2011, 08:53
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Меняйте свойство background-position.
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2011, 04:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Пара вопросов для знатоков: как получить значение background-position в jQuery ?
например:
$(document.body).css('backgroundPosition')

кросбраузерно и как анимировать проще
$(document.body).animate({backgroundPosition: "60% 80%"})

А пока вариант не слишком компактный )))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title></title>
  <style type="text/css">
  body{
   background: url(http://commondatastorage.googleapis.com/static.panoramio.com/photos/original/28749777.jpg);
   background-position: 60% 80%;
   background-attachment: fixed;
   min-height: 100%;
   min-width: 100%;
   color: #FFFFFF;
  }
  </style>
</head>
<body>
<div id="show" style="position: fixed">60% 80%</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script  type="text/javascript">
(function (c) {
    function g(a) {
        a = a.replace(/left|top/g, "0px");
        a = a.replace(/right|bottom/g, "100%");
        a = a.replace(/([0-9\.]+)(\s|\)|$)/g, "$1px$2");
        a = a.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
        return [parseFloat(a[1], 10), a[2], parseFloat(a[3], 10), a[4]]
    }
    if (!document.defaultView || !document.defaultView.getComputedStyle) {
        var d = jQuery.curCSS;
        jQuery.curCSS = function (a, b, e) {
            if (b === "background-position") b = "backgroundPosition";
            if (b !== "backgroundPosition" || !a.currentStyle || a.currentStyle[b]) return d.apply(this, arguments);
            var f = a.style;
            if (!e && f && f[b]) return f[b];
            return d(a, "backgroundPositionX", e) + " " + d(a, "backgroundPositionY", e)
        }
    }
    var h = c.fn.animate;
    c.fn.animate = function (a) {
        if ("background-position" in a) {
            a.backgroundPosition = a["background-position"];
            delete a["background-position"]
        }
        if ("backgroundPosition" in a) a.backgroundPosition = "(" + a.backgroundPosition;
        return h.apply(this, arguments)
    };
    c.fx.step.backgroundPosition = function (a) {
        if (!a.bgPosReady) {
            var b = c.curCSS(a.elem, "backgroundPosition");
            b || (b = "0px 0px");
            b = g(b);
            a.start = [b[0], b[2]];
            b = g(a.options.curAnim.backgroundPosition);
            a.end = [b[0], b[2]];
            a.unit = [b[1], b[3]];
            a.bgPosReady = true
        }
        b = [];
        b[0] = (a.end[0] - a.start[0]) * a.pos + a.start[0] + a.unit[0];
        b[1] = (a.end[1] - a.start[1]) * a.pos + a.start[1] + a.unit[1];
        a.elem.style.backgroundPosition = b[0] + " " + b[1]
    }
})(jQuery);
</script>

<script type="text/javascript">
$(function () {
    function d() {
        $(document.body).stop();
        $(document.body).animate({
            backgroundPosition: "60% 80%"
        }, 2E3, function () {
            $("#show").html("60% 80%")
        })
    }
    $(document).mousemove(function (a) {
        $(document.body).stop();
        var b = $(window).width(),
            c = $(window).height();
        b = Math.ceil((a.pageX - $(document).scrollLeft()) * 100 / b);
        a = Math.ceil((a.pageY - $(document).scrollTop()) * 100 / c);
        b > 100 && (b = 100) && d();
        a > 100 && (a = 100) && d();
        c = b + "% " + a + "% ";
        $("#show").html(c);
        b < 100 && a < 100 && $(document.body).css({
            backgroundPosition: c
        })
    });
    $(document).mouseout(d)
});
</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2011, 21:11
Аватар для phgrey
Интересующийся
Отправить личное сообщение для phgrey Посмотреть профиль Найти все сообщения от phgrey
 
Регистрация: 21.03.2011
Сообщений: 14

$(document.body).css('background-position');

в $ все свойства читаются как пишутся )))

http://api.jquery.com/animate/
Например так - background-position будет плавно (в течении 500 мсек) изменен с текущего значения до 80%
$(document.body).animate({'background-position': "80%"}, 500);
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2011, 21:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от phgrey
$(document.body).css('background-position');
это неработает в Internet Explorer
Сообщение от phgrey
$(document.body).animate({'background-position': "80%"}, 500);
А это попробуйте запустить с двойным параметром 60% 80%;;
Сообщение от phgrey
в $ все свойства читаются как пишутся )))
Пример что и как может писаться -- запустить в Internet Explorer
и других браузерах.
<!DOCTYPE html>
<html>
<head>
  <title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script language="JavaScript" type="text/javascript">
$(function () {
alert($(document.body).css('background-position'));
alert($(document.body).css('backgroundPosition'));
})
</script>
</head>
<body>
</body>
</html>

P.S Если бы было всё так просто то не писались бы плагины для backgroundPosition в jquery
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное появление сайта... hobbystudio jQuery 8 25.11.2010 22:36
Grid - roweditor плавное перемещение Jevgeny ExtJS 2 26.10.2010 14:43
Плавное открытие окна. Flashton Элементы интерфейса 3 20.10.2010 16:00
сделать плавное переключение картинок asker Библиотеки/Тулкиты/Фреймворки 2 11.09.2010 18:15
background image, справочник igor1102828 Элементы интерфейса 2 23.03.2008 18:53