Как сделать двигающийся аплоадер минимального размера и красиво

    Хочу поделиться небольшим трюком для создания анимированной полосы загрузки как в флеш проигрывателях или в операционной системе.
    Имеем в наличии просто картинку:


    Как заставить её двигаться? А очень просто! Нужно двигать бекграунд в интервале попиксельно.
    Смотрим демо



    Если вы не посмотрели исходный текст страницы приведу тут код:
    var xPos=0;
    function move_bg(){
    $("#load_td").css( {backgroundPosition: xPos+'px 0px'} );
    if(xPos == 60){
    xPos=0;
    }
    xPos++;
    }


    Функция в интервале, каждый вызов увеличивает на 1 значение на которое нужно сдвинуть пиксель, когда значение достигает ширины фоновой картинки оно сбрасывается в 0 таким образом происходит незаметная глазу замена.

    Наверное метод давно используется но я до него дошел сам, надеюсь кому-то пригодиться.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 64

      0
      Дема чё-то не пашет.

      А по нормальному - это делается анимированной гифкой в ImageReady, и не по пикселю а по 5-10.
        +5
        Анимированый гиф будет весить как 20 картинок, а тут один jpg
          –2
          а как быть с нагрузкой на брауeзер лишним js?
            0
            предположим что эту картинку вы используете в сайте где уже прописана библиотека.
              0
              ну если только в таком случае а так я не вижу смысла нагружать страницу разрозненными скриптами (это сугубо моё мнение и не факт что это правильно!)
              • UFO just landed and posted this here
                  0
                  вот и я о том
            +3
            Есть такой замечательный сервис как http://www.ajaxload.info/ Он генерирует гифки средним размером в 10 кб.

            Я думаю этим размером можно пренебречь, учитывая что лоад-бар грузится только по нажатию кнопки или ссылки. При загрузке страницы роли не сыграет никакой, зато нагрузки на браузер меньше. К тому же как быть если у пользователя отключены картинки? В случае с гифкой все решит alt="" а в вашем случае пользователь не поймет идет ли процесс или нет.
            0
            Вот из за таких пользователей мы и получаем огромный странице вес которых не оправдан
            0
            ff3, linux, в демо никакого движения нет.

            И советую поработать над орфографией и пунктуацией. Особенно "юзаеться" режет глаза. Извините, если задеваю :)
              –1
              Та нет, я просто думал всем это будет понятно я програмистам слово юзаеться резать глаз не будет)

              А вы на кнопку старт нажимали?
                +1
                Грамотность приветствуется даже среди программистов. вы же пишите для громадного сообщества, а не в чате. Уделите 5 минут работе над ошибками, вам лишний раз скажут спасибо.

                Нажимал, конечно. Никакой реакции, карсный фон панельки только.
                  0
                  Заработало. )
                  +1
                  Режет глаза не сленг, а ошибка в написании слова.
                  –1
                  ff3, linux, есть движение, причем вполне отчетливое-)
                    –1
                    вы остальные комментарии принципиально не читаете?
                  +1
                  А да, я же поменял название папки со scripts на src в ссылке потому что хабр на scripts ругался. исправил пути, смотрите.
                    –2
                    Fx3/Vista — демо не работает.
                    Если уж «юзать», то «юзается», без мягкого знака.
                      +1
                      А зачем для такой мелочи стокилобайтный фреймворк использовать?
                        +1
                        Ну это конечно когда у вас на сайте уже есть фреймворк. В демке можно и без него, но я просто вынул кусочек своего кода.
                        • UFO just landed and posted this here
                            0
                            Можно. Просто двигайте бекграунд на 1 пиксель в интервале.
                            • UFO just landed and posted this here
                              0
                              Конечно можно, только искать через getElementById. И ксс по-другому использовать.
                              • UFO just landed and posted this here
                                0
                                Было уже на хабре - Выбрасываем Flash, кочегарим Javascript: Анимация. (Урок) - обширное описание со сдвигающимся бекграундом и чистым js.
                              +3
                              тридцатикилобайтный, а если постараться, то шестнадцатикилобайтный
                              +2
                              Хороший пример в канди стайл ;). Просто и со вкусом.
                                –2
                                Реально гифом больше мороки)
                                0
                                Прикольно :)
                                  0
                                  Да и гифом управлять нельзя, а тут можно увеличиать либо уменьшать скорость изменяя время интервала.
                                    +2
                                    Считаю, что для конкретной задачи .gif лучше.
                                    http://350d.ru/progress.html

                                    8кб gif, никаких заморочек с JS, тормозами и фликами в IE.
                                      –1
                                      А ну ка остановите прокрутку или увеличте скорость движения динамически
                                        +1
                                        а зачем?

                                        "A ну ка" отключите JS в браузере.

                                        можно в одном гифе объединить все состояния, и замена класса у эелемента будет выглядеть логичнее чем такие заморочки с JS
                                          0
                                          Это еще не заморочки совсем. Просто мне так больше нравиться, это как один из вариантов я не утверждаю что правильней.
                                          Отключив js вы стиль тоже поменять несможете ксати)
                                            0
                                            без JS вы не пошевелите этим прогресс баром вообще, не гоните пургу.
                                            0
                                            Можно так сделать.

                                            Два класса:

                                            .progress {
                                            background:url(анимированный_гиф.gif) left top repeat-x;
                                            }

                                            .stop {
                                            background:url(тот_же_гиф_без_анимации.gif) left top repeat-x;
                                            }

                                            Для остановки просто подменить класс. Для ускорения можно так же сделать, но ускорение не особо нужная функция.
                                              0
                                              Ой. Случайно повторил мысль выше.
                                                0
                                                Да можно. И действительно ускорение не очень нужное. но бывает и пригодиться как и большиство еффектов не нужно до определенного времени.
                                                Кстати это у вас уже начинаютсья заморочки с гифом, вот сделайте еще гиф который будет это дело назад крутить, еще ода картинка. снова рисовать, а в яваскрипте нужно изменить операцию плюсования на минусование и двигать бекграун назад, или влево или вправо или вообще в бок :-)
                                                  0
                                                  Зато в гифе можно ещё растягивать, вращать и применять другие ортогональные и эрмитовы преобразования.
                                                  0
                                                  и еще вам прийдеться позаботиться чтобы эта картинка предварительно загрузилась перед тем как менять клас, нито будет некрасивый переход.
                                              0
                                              И весит файлик 1.8кб
                                                0
                                                да, да, полностью согласен. я к сожалению по своей хронической невнимательности не заметил заюзаный фреймворк в таком случае все даже логично и даже очень интересное решение. СПС за идею буду думать над применением.
                                                0
                                                Может поместите материал в какой-нибудь блог, дабы потом можно было найти? :-)
                                                  +2
                                                  понабежало на хабр джедаев веб-разработки в последнее время.
                                                  вас только за использование тега center по рукам набить надо, не то что за статью про ипользование jQuery там, где без него код на чистом JS написать нисколько не проблематично.
                                                  • UFO just landed and posted this here
                                                      +3
                                                      В прошлом году мне понадобилось помеять внешний вид стрелочки у веб-контрола из одной очень небесплатной библиотеки. Ну там все не-слава-аллаху, но где картинку для стрелочки заменить - я долго понять не мог. Притом, что цвет фона я самой стрелки можно было задавать через параметры.

                                                      Вобщем, ткнулся в код веб-дев-тулом - а стрелка-то и не картинка вовсе. Таблица с ячейками в пиксель площадью, восемнадцать tr по восемнадцать td, что ли, у каждой фон задан.

                                                      А вы говорите жипег жабаскриптом скроллится. Ежели кодеру ограничения четко не задать он и не то нафантазирует.
                                                        0
                                                        Обалденно. Это ж сколько выкурить надо для такого?
                                                        0
                                                        ---(ОТВЕЧАЮ СРАЗУ НЕСКОЛЬКИМ, Т.К. МОГУ КОММЕНТИТЬ ТОЛЬКО РАЗ В 5 МИНУТ)---

                                                        Пару Kb - огромный вес? Gif-ка может быть достаточно оптимизирована. Напр. делал 100x100 эффект огня - всего 13 Kb.

                                                        В каком веке вы живёте? И как насчёт нагрузки на процессор – сдвиг по пикселю, блин (а если длина полоски 400px).

                                                        А как насчёт совместимости без JS??? Для меня это гораздо важнее, чем экономия 0.5 сек. пользователя.

                                                        К тому же, есть достаточно много стандартных полос – и что, тратить время на редактирование, добавление JS??
                                                          0
                                                          А тратить время на рисование гифа. Кстати сколько будет весить такая гифка http://habrahabr.ru/blog/webdev/37871.ht… очень интерестно.

                                                          Во вторых библиотека jQuery позволяет говорить что поведение полоски будет одинаковое во всех браузерах. В третьих єто только на моей странице демо столько строк, а что двигать картинку нужновсего 5 строк кода, совсем не сложных, времени тут много точно не потратиш, развичто специально.

                                                          ну и вы сами себе противоречете говоря про век. По крайней мере у меня на самом типичном компьютере все рисуетсья без тормозов.
                                                            –3
                                                            Вот у меня от 50 вкладок открыто, если каждый считает своим долгом сделать сайт под вебдваноль и заюзать огромные фреймворки, то я нафиг отключаю JS. Ибо скоро уже под JS нужно будет еще одно ядро CPU, про память молчу.
                                                              –2
                                                              Ну тогда сами виноваты, уверен что вам и половина закладок из 50 не нужна.
                                                              0
                                                              Каждой задаче своё решение.

                                                              jQuery для элемента вёрстки... я пАдСтолом!

                                                              Вообще, сейчас тенденция отказа от этих полосок, т.к. они часто занимают больше времени у пользователя (в т.ч. на рендеринг), чем сам процесс загрузки.
                                                                0
                                                                У меня эта полоска используеться не для предзагрузчика, а для аплоадера файлов когда уже все загрузилось. Проверьте сами http://muslib.net/ залив песенку mp3
                                                                –2
                                                                >Во вторых библиотека jQuery позволяет говорить что поведение полоски будет одинаковое во всех браузерах.
                                                                Библиотека jQuery в данном случае говорит лишь о том, что вы не знаете толком JavaScript. Без нее функция будет практически та же самая (хотя можно и короче), а работать будет быстрее.
                                                                  0

                                                                  поведение полоски будет одинаковое во всех браузерах.

                                                                  не-а, у меня например в Опере медленней движется в ФФ быстрее =)
                                                                    0
                                                                    В опере кстати красивее выходит, плавнее намного, она как-то лучше с этим справляеться.
                                                                0
                                                                Согласен с комментариями. Если вы сделаете анимированный гиф - он не будет весить в 20 раз больше, потому что там одна картинка будет двигаться на 5 пискелей. Картинка такая весила 4Кб всего. Обходится дешевле, чем гонение гифа ява-скриптом.
                                                                  0
                                                                  В данном случае, вы забиваете микроскопом сами знаете что.
                                                                    0
                                                                    извините, но такое лучше делать анимированным гифом, как и говорят выше.
                                                                      –1
                                                                      Для тех кто боиться за процесор: можно двигать и не попиксельно как я, а по 5 пикселей как предлагаете в гифке, хоть по 10 просто анимация будет не такая плавная, а я хотел добиться эффекта "это что - флеш?"
                                                                        0
                                                                        Господы, вы тут спорите про байты а у для такого мизерного эфекта, который достигается анимированным гифов используется целую библиотеку.

                                                                        И не надо говорить про увелечение - уменьшение скорости анимации. Это все от лукавого - скорость загрузкт того, перед чем этот прелоадер, она не меняет.

                                                                        Давайте использовать вещи по назначению ...


                                                                        Фреймоврк в не умелых руках вешает браузер только в путь :)
                                                                          –1
                                                                          Остальные комментарии принципиально не читаем ?
                                                                          0
                                                                          Бессмысленно =/

                                                                          Only users with full accounts can post comments. Log in, please.