Автор

FrameWarp-плагин для вывода страниц в окнах

FrameWarp-плагин для вывода страниц в окнах


 

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

 

ДЕМО
ИСХОДНИКИ

 

Для данной функции существуют множество различных плагинов, но мы отдали предпочтения именно этому. Данный плагин обладает рядом преимуществ, а именно:

  • Маленький размер - создан специально для отображения страниц, а не картинок;
  • Не имеет интерфейса, по этому страница будет отображаться в обычном окне;
  • Страница имеет возможность закрытия и отправки сообщения с модального окна;
  • Может использовать кэш для ускорения загрузки страницы;

Основная идея состоит в том, что при нажатии на ссылокнку или кнопки, плагин, FrameWarp, определит координаты этого элемента и вызывает анимацию CSS всплывающего прямоугольника в центре страницы. Плагин будет загружаться при помощи JS Iframe и ссылаться на урлу, который мы указали.

 

Возможности плагина

Теперь необходимо написать сам плагин. нам необходимо добавить наш код в скрытую функцию так, чтобы он был недоступен для остальной части страницы. В действительности все переменные и вспомогательные функции доступны только для этого плагина.

framewarp.js

(function($){

// Основные переменные
 var body = $('body'),
 win = $(window),
 popup, popupBG;
 var frameCache = {};
 var frameCacheDiv = $('<div class="frameCacheDiv">').appendTo('body');
 var currentIframe;
 $.fn.frameWarp = function(settings){

// Основной код плагина
 };
 // Вспомогательные функции
 function hide(){

// Удаляем темный фон из страницы
 }
 function setUpAPI(iframe, settings){

// Сделаем два API метода доступными для фрейма,
 // если эта страница от того же домена.
 }
 function sameOrigin(url){

// Нужно определить домен
 }
 function getOrigin(url){

}
 })(jQuery);

 

Данный плагин создает div с классом frameCacheDiv, для добавления js iframe, который мы добавим к странице. Еще два div будут добавлены к странице с помощью плагина – .popup и .popupBG, которые мы рассмотрим немного позже. Теперь давайте рассмотрим вспомогательные функции.

function hide(){

if(currentIframe){
 currentIframe.hide();
 currentIframe = null;
 }

popupBG.remove();
 popup.remove();
}

function setUpAPI(iframe, settings){

if(sameOrigin(settings.url)){

// минимум API в iFrame
 iframe[0].contentWindow.frameWarp = {
 hide: hide,
 sendMessage:function(param){
 return settings.onMessage(param);
 }
 };
 }
}

function sameOrigin(url){

// Определяем url,
 // Ссылаемся к сайту или к удаленному серверу

return (getOrigin(url) == getOrigin(location.href));
}

function getOrigin(url){

// Используем элемент привязки
 // для разбора URL

var a = document.createElement('a');
 a.href = url;

return a.protocol+'//'+a.hostname;
}

 

Но следует заметить, что во всех современных браузерах реализована защиты которая называется: “same origin policy”, которая устанавливает ограничение веб-сайту для получения доступу к функции DOM другого сайта. По этой причине, у нас есть вспомогательная функция, которая сравнивает адрес js iFrame с адресом текущей страницы. Только когда и домен и соответствие протокола определенны, мы получим доступ к DOM iframe и добавим API методы для отправки сообщений и скрывался. На конечном этапе плагин frameWarp будет выглядеть так.

$.fn.frameWarp = function(settings){
// Настройки по умолчанию
 settings = $.extend({
 cache: true,
 url: '',
 width:600,
 height:500,
 closeOnBackgroundClick: true,
 onMessage:function(){},
 onShow:function(){}
 }, settings);
 this.on('click',function(e){
 e.preventDefault();
 var elem = $(this),
 offset = elem.offset();

 // Центральная кнопка
 var buttonCenter = {
 x: offset.left - win.scrollLeft() + elem.outerWidth()/2,
 y: offset.top - win.scrollTop() + elem.outerHeight()/2
 };

 // Центр окна
 var windowCenter = {
 x: win.width()/2,
 y: win.height()/2
 };

 // Если нет URL, используйте атрибут href.
 if(!settings.url && elem.attr('href')){
 settings.url = elem.attr('href');
 }

 // Темный фон
 popupBG = $('<div>',{'class':'popupBG'}).appendTo(body);
 popupBG.click(function(){
 if(settings.closeOnBackgroundClick){
 hide();
 }
 }).animate({
 'opacity':1
 },400);

 // Всплывающее окно
 popup = $('<div>').addClass('popup').css({
 width : 0,
 height : 0,
 top : buttonCenter.y,
 left : buttonCenter.x - 35
 });

 // Добавление в страницу CSS3 анимации
 popup.appendTo(body).animate({
 'width' : settings.width,
 'top' : windowCenter.y - settings.height/2,
 'left' : windowCenter.x - settings.width/2,
 'border-top-width' : settings.height,
 'border-right-width' : 0,
 'border-left-width' : 0
 },200,function(){
 popup.addClass('loading').css({
 'width': settings.width,
 'height': settings.height
 });
 var iframe;

// Если этот IFRAME уже существует в кэше
 if(settings.cache && settings.url in frameCache){
 iframe = frameCache[settings.url].show();
 }
 else{
 iframe = $('<iframe>',{
 'src' : settings.url,
 'css' : {
 'width' : settings.width,
 'height' : settings.height,
 }
 });

 // Если кэш включен, добавить к нему фрейм
 if(settings.cache){
 frameCache[settings.url] = iframe;
 iframe.data('cached',true);
 settings.onShow();
 }
 else{

 // Удаление некэшируемых фреймов
 frameCacheDiv.find('iframe').each(function(){
 var f = $(this);
 if(!f.data('cached')){
 f.remove();
 }
 });
 }
 iframe.ready(function(){
 frameCacheDiv.append(iframe);
 setUpAPI(iframe, settings);
 settings.onShow();
 });
 }
 currentIframe = iframe;
 });
 });
 return this;

};

 

Как уже заметили ранее, для начала мы используем jQuery, чтобы улучшить функцию jQuery animate(), которая поддерживает CSS анимацию.

 

Использование плагина

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

$(function(){

// Если никакое свойство URL не будет передано,
 // то будет использоваться атрибут href

$('#b1').frameWarp();

$('#b2').frameWarp({
 onMessage: function(msg){
 $('#messages').append('Message Received: '+ msg+'
');
 }
 });

// Кэш включен по умолчанию
 $('#b3').frameWarp({
 url : 'http://www.s-sd.ru/'
 });

// Отключение кэширования
 $('#b4').frameWarp({
 url : 'http://www.s-sd.ru/',
 cache:false
 });
});

 

Вот и все. Готово!

Материал взят из зарубежного источника. И представлен исключительно в ознакомительных целях.


vk.com/club.ssdru

Подписывайтесь на нашу группу в контакте vk.com/club.ssdru



Статьи по темеjQuery

FrameWarp-плагин для вывода страниц в окнах

Страница 404 одна из наиболее распространенных страниц-ошибок для сайта, действие пользователей часто приводит к перенаправлению их на данную страницу, но когда посетитель видит обычную страницу ошибку, зачастую его просмотр сайта заканчивается, но как сделать, чтобы при попадании на такую страницу пользователи не убегали отвал, а возвращались назад к просмотру сайта. Как показывает статистика, посетители более дружелюбны к сайтам, где оформлены страницы ошибок, чем обычная заглушка ошибки.


FrameWarp-плагин для вывода страниц в окнах

Формат SVG делает сайт, более интересным. Это действительно много творческих возможностей для интересных эффектов на веб-сайт с использованием SVG. Сегодня мы хотели бы поделиться с вами двумя экспериментальными понятиями, которые используют анимацию, ставших популярными благодаря анимации на PlayStation 4 и Xbox одновременно.


FrameWarp-плагин для вывода страниц в окнах

Слайдер с различными эффектами переходов (7 различных эффектов, в том числе 3D). Адаптер представляет собой легкий контент-слайдер, простой интерфейс для разработчиков и создания 2D или 3D слайд анимации переходов.
Добавлена поддержка 3D для webkit и Mozilla, всех других браузерах будет запасной вариант изящно простой fade перехода при использовании 3D-эффекты.
Все 2D переходы между слайдами были протестированы в IE6+, и всех других современных браузерах.


FrameWarp-плагин для вывода страниц в окнах

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


75 Публикаций

Раскрутка в соцсетях

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


Перейти в Блог

О КОМПАНИИ

Studio Design существует с 2001 года. Основной нашей деятельностью до 2007 года было видеопроизводство ( видеореклама и документальные фильмы, о чем подробно описано в нашем блоге ). С 2007 года, вот уже как лет, наша основная специфика - это создание сайтов для бизнеса или частной деятельности, веб дизайн, а также поддержка и администрирование готовых проектов. Каждая выполненная нами работа - это уникальный, а самое главное, адаптивный под все современные мобильные устройства дизайн сайта. Мы готовы создать сайт с нуля для каждого клиента с любого уголка России! Мы поможем Вам в создании, как одностраничных сайтов – визиток, так и крупных интернет магазинов или корпоративных сайтов. А все наши работы, большинство из которых действуют и по сей день!

Close

Целовальников Сергей


Веб-дизайн, HTML5, CSS3, jQuery, JavaScript, Верстка.

Верстальщик с большим опытом работы. Занимаюсь созданием сайтов с 2005 года. Постоянно обучаюсь и совершенствую свои навыки. Веду свои проекты, в том числе и данный блог.

Close