Жаркое и яркое лето 2013 года в Петербурге подарило нам много красивых и приятных мгновений. И одно из них – яркие и красивые же молодые пары, которые мне посчастливилось снимать. …
2013-10-13 13:49:13
Сегодня покажу как сделать заменить " loading" картинку на CSS . Идея состоит в том, чтобы ...
+ развернуть текстсохранённая копия
Сегодня покажу как сделать заменить " loading" картинку на CSS . Идея состоит в том, чтобы управлять объектами HTML, используя только CSS , таким образом, мы можем избавится от GIF.
Отказ от ответственности: Цель этой статьи состоит в том, чтобы показать Вам возможности CSS. Содержание может не быть практичным, чтобы использовать в действительности. Демонстрационный пример работает лучше всего в Хроме, и частично работает в Firefox и Сафари.
ПРЕИМУЩЕСТВА ИСПОЛЬЗОВАНИЯ ANIMATION CSS перед GIF/JS Это дало мне больше контроля над анимацией. Я нашел, что намного более удобнее отредактировать элементы и скорость анимации через CSS вместо того, чтобы по мучатся с Фотошопом. Анимация CSS использует ускорение GPU, которое намного быстрее, чем применение JS и намного легче с точки зрения размера, когда сравниваются с gif изображениями. CSS позволяет пользователям быть в состоянии взаимодействовать с анимацией. Для gif изображений нет никакого взаимодействия между пользователями и анимацией. С ДРУГОЙ СТОРОНЫ, ТАКЖЕ ЕСТЬ НЕКОТОРЫЕ НЕДОСТАТКИ Анимация CSS еще широко не поддерживается. Например, в нашем демонстрационном примере, некоторые аннимации не работают в Сафари, но работают хорошо в Хроме. Чтобы улучшить работу, я решил свести код HTML к минимуму, чтобы ускорить начальную загрузку страницы. Реализовал при помощи псевдо элементов :before и :after. CSS позволяет мне легко создавать 3 анимированных элемента, используя один HTML-тэг. Вы можете легко отредактировать любые изменения, просто регулируя числа в файле CSS. В демо 5 различных АЯКСА CSS, анимации, чтобы показать Вам,на что способна анимация CSS . Не стесняйтесь экспериментировать на них так, как Вы хотите. Я надеюсь, что Вы понравились мой небольшой эксперимент и если у Вас есть идеи, чтобы показать нам, не стесняйтесь показывать их в комментариях ниже.
1.Скачиваем архив [isnt-logged]Вы не можете скачивать файлы с нашего сайта ,рекомендуем Вам pure-css-ajax-loader.zip (14.79 Kb)[/is-logged] ,распаковываем и заливаем в папку с шаблоном. 2.в хеад подключаем стили и .
2013-09-20 13:34:15
Слайдер с объемным фоновым эффектом. Изюминка этого слайдера в движение фона, который состоит из ...
+ развернуть текстсохранённая копия
Слайдер с объемным фоновым эффектом. Изюминка этого слайдера в движение фона, который состоит из нескольких слоев, каждый из которых прокручивается с различной скоростью. В итоге получается имитация объемного эффекта. Выглядит очень красиво, вы можете сами в этом убедиться. Более плавно эффект отображается в таких браузерах как: Opera, Google Chrome, IE . Установка и настройка Скачать архив [isnt-logged]Вы не можете скачивать файлы с нашего сайта ,рекомендуем Вам parallaxslider.zip (1 Mb)[/is-logged] Структура HTML состоит из главного контейнера с классом “pxs_container”. Мы добавим оформление для трех различных фонов, которые мы оживим по-разному, чтобы создать эффект параллакса. У фоновых изображений будет некоторая прозрачность, чтобы видеть, как они двигаются между собой. Мы также добавим loading element и два не заказанных списка для полных изображений и уменьшенных изображений. Далее, мы добавим навигационные элементы. Код самого слайдера размещаем там где хотим видеть слайдер
Теперь, настройка стиля. CSS Мы начнем с главного контейнера. Так как мы будем использовать целую страницу для ширины слайдера, мы установим его в 100%. Этот элемент будет иметь свойство position relative, потому что мы установим весь элемент внутри position absolute (и мы хотим, чтобы они были перемещались относительно контейнера а не страницы):
Мы также установим left value этих блоков динамически. Но мы возвратимся к этому позже. Давайте посмотрим на стиль других элементов. В начале следующая блок будет невидим:
Код:
.pxs_slider_wrapper{ display:none; }
Он содержит все элементы, которые мы хотим загрузить в начале, поэтому, как только загрузка будет сделано, мы покажем Блок и все содержимое. Давайте сбросим стиль для обоих списков:
Основная идея для списка слайдера состоит в том, что мы делаем действительно длинный список со всеми элементами li, имеющими ширину целого окна. Так, что Вы видите на экране слайдера, фактически один целый li. Мы установим ширину ul динамически, чтобы ширина окна соответствовала числу изображений в списке. Присвоение свойства float left списку, и корректная ширины ul гарантирует, что элементы списка выстроены в линию друг рядом с другом:
Добавление прозрачной границы и тени поля создаст эффект стекла вокруг изображения. Список миниатюр будет позиционироваться абсолютно. Мы добавляем left of 50%, чтобы центрировать его, динамически устанавливая его ширину и отрицательное левое поле в JavaScript:
Давайте добавим стрелку к каждому кнопке навигации:
Код:
.pxs_navigation span.pxs_prev{ background:#000 url(../images/prev.png) no-repeat center center; } .pxs_navigation span.pxs_next{ background:#000 url(../images/next.png) no-repeat center center; }
Мы установим левое (pxs_prev) и право (pxs_next) значение динамически, чтобы придерживаться левой и правой стороны изображения. И наконец, мы добавим загружающийся элемент:
JAVASCRIPT Основная идея этогослайдера состоит в том, чтобы двигать изображения (очевидно), и анимировать эти три фона по-разному, чтобы создать некоторую перспективу. Так, когда , например, будем скользить к следующему изображению, мы аниммируем левое значение слайдера ul к минус ширина окна (потому что это - ширина одного списка). Мы также аниммируем фоновый блок, который является визуально самым верхним фоном, но анимация будет половиной ширины окна. Фон, позади которого переместит одну четверть ширины окна и т.д. Таким образом, фон, который "более далек", переместит меньше, что описывает принцип параллакса. Мы хотим создать плагин из этого скрипта, таким образом, мы первоначально определим некоторые опции. Мы запустим, кэшируя самые важные элементы.
Код:
(function($) { $.fn.parallaxSlider = function(options) { var opts = $.extend({}, $.fn.parallaxSlider.defaults, options); return this.each(function() { var $pxs_container = $(this), o = $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;
//the main slider var $pxs_slider = $('.pxs_slider',$pxs_container), //the elements in the slider $elems = $pxs_slider.children(), //total number of elements total_elems = $elems.length, //the navigation buttons $pxs_next = $('.pxs_next',$pxs_container), $pxs_prev = $('.pxs_prev',$pxs_container), //the bg images $pxs_bg1 = $('.pxs_bg1',$pxs_container), $pxs_bg2 = $('.pxs_bg2',$pxs_container), $pxs_bg3 = $('.pxs_bg3',$pxs_container), //current image current = 0, //the thumbs container $pxs_thumbnails = $('.pxs_thumbnails',$pxs_container), //the thumbs $thumbs = $pxs_thumbnails.children(), //the interval for the autoplay mode slideshow, //the loading image $pxs_loading = $('.pxs_loading',$pxs_container), $pxs_slider_wrapper = $('.pxs_slider_wrapper',$pxs_container);
//first, preload all the images var loaded = 0, $images = $pxs_slider_wrapper.find('img');
//width of an image //(assuming all images have the same sizes) var one_image_w = $pxs_slider.find('img:first').width();
/* set the width of the slider, of each one of its elements, and of the navigation buttons */ setWidths($pxs_slider, $elems, total_elems, $pxs_bg1, $pxs_bg2, $pxs_bg3, one_image_w, $pxs_next, $pxs_prev);
/* set the widths of the thumbs and spread them evenly */ $pxs_thumbnails.css({ 'width' : one_image_w + 'px', 'margin-left' : -one_image_w/2 + 'px' }); var spaces = one_image_w/(total_elems+1); $thumbs.each(function(i){ var $this = $(this); var left = spaces*(i+1) - $this.width()/2; $this.css('left',left+'px');
if(o.thumbRotation){ var angle = Math.floor(Math.random()*41)-20; $this.css({ '-moz-transform' : 'rotate('+ angle +'deg)', '-webkit-transform' : 'rotate('+ angle +'deg)', 'transform' : 'rotate('+ angle +'deg)' }); } //hovering the thumbs animates them up and down $this.bind('mouseenter',function(){ $(this).stop().animate({top:'-10px'},100); }).bind('mouseleave',function(){ $(this).stop().animate({top:'0px'},100); }); });
//make the first thumb to be selected highlight($thumbs.eq(0));
/* clicking a thumb will slide to the respective image */ $thumbs.bind('click',function(){ var $thumb = $(this); highlight($thumb); //if autoplay interrupt when user clicks if(o.auto) clearInterval(slideshow); current = $thumb.index(); slide(current, $pxs_slider, $pxs_bg3, $pxs_bg2, $pxs_bg1, o.speed, o.easing, o.easingBg); });
/* activate the autoplay mode if that option was specified */ if(o.auto != 0){ o.circular = true; slideshow = setInterval(function(){ $pxs_next.trigger('click'); },o.auto); }
/* when resizing the window, we need to recalculate the widths of the slider elements, based on the new window width; we need to slide again to the current one, since the left of the slider is no longer correct */ $(window).resize(function(){ w_w = $(window).width(); setWidths( $pxs_slider, $elems, total_elems, $pxs_bg1, $pxs_bg2, $pxs_bg3, one_image_w, $pxs_next, $pxs_prev ); slide( current, $pxs_slider, $pxs_bg3, $pxs_bg2, $pxs_bg1, 1, o.easing, o.easingBg ); });
//the current window width var w_w = $(window).width();
var slide = function(current, $pxs_slider, $pxs_bg3, $pxs_bg2, $pxs_bg1, speed, easing, easingBg){ var slide_to = parseInt(-w_w * current); $pxs_slider.stop().animate({ left : slide_to + 'px' },speed, easing); $pxs_bg3.stop().animate({ left : slide_to/2 + 'px' },speed, easingBg); $pxs_bg2.stop().animate({ left : slide_to/4 + 'px' },speed, easingBg); $pxs_bg1.stop().animate({ left : slide_to/8 + 'px' },speed, easingBg); }
var highlight = function($elem){ $elem.siblings().removeClass('selected'); $elem.addClass('selected'); }
var setWidths = function($pxs_slider, $elems, total_elems, $pxs_bg1, $pxs_bg2, $pxs_bg3, one_image_w, $pxs_next, $pxs_prev){ /* the width of the slider is the window width times the total number of elements in the slider */ var pxs_slider_w = w_w * total_elems; $pxs_slider.width(pxs_slider_w + 'px'); //each element will have a width = windows width $elems.width(w_w + 'px'); /* we also set the width of each bg image div. The value is the same calculated for the pxs_slider */ $pxs_bg1.width(pxs_slider_w + 'px'); $pxs_bg2.width(pxs_slider_w + 'px'); $pxs_bg3.width(pxs_slider_w + 'px');
/* both, the right and left of the navigation next and previous buttons will be: windowWidth/2 - imgWidth/2 + some margin (not to touch the image borders) */ var position_nav = w_w/2 - one_image_w/2 + 3; $pxs_next.css('right', position_nav + 'px'); $pxs_prev.css('left', position_nav + 'px'); }
Мы также добавляем следующий сценарий, чтобы инициировать наш слайдер:
Код:
$(function() { var $pxs_container = $('#pxs_container'); $pxs_container.parallaxSlider(); });
Опции для слайдера - следующее: auto: Сколько секунд, чтобы периодически двигать содержание. Если установлено в 0 тогда автоматическое воспроизведение выключено. speed: Скорость анимации easing: Упрощение эффекта для анимации понижения easingBg: Упрощение эффекта для фоновой анимации circular: Круговой ползунок thumbRotation: Слайдер будет работать в случайном порядке Ну вроде все ,пользуемся
2013-09-02 13:45:54
На связи Сергей Родюков, автор рассылки и уникального блога о скидках на интересные обучающие курсы. ...
+ развернуть текстсохранённая копия
На связи Сергей Родюков, автор рассылки и уникального блога о скидках на интересные обучающие курсы. Рад сообщить, что в честь Дня Знаний с 1-го по 5-е сентября включительно проходит традиционная грандиозная акция 30%-х скидок на все информационные товары и обучающий видеокурсы Евгения Попова и Зинаиды Лукьяновой! Вы можете получить абсолютно ЛЮБОЙ курс Евгения Попова или [...]