Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.08.2016, 22:55
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

var a=document.querySelectorAll('a.type-ajax');

for(var i=0;i<a.length;i++)

	a[i].addEventListener('click',

		function(e){
			e.preventDefault(); /* стопе */
			ajax({
				url:this.href,
				success:function(data){
					some_elem.innerHTML=data.html;
				}
			});
		}
	);


Но тогда у тебя все ссылки будут загружаться без изменения адреса. Если это николебет, а если колебет, то надо юзать history, который легко заделать под небольшой обхект

var HistoryStates=function(){

	var 
	
	page={url:location.href,title:D.title},
	
	onpopstate=function(e){
		location.assign(e.state.url);
    };
	
	this.restore=function(){
		D.title=page.title;
		history.replaceState(page,page.title,page.url);
	},
	
	this.push=function(data){
		D.title=data.title;
		history.pushState({'url':data.url},data.title,data.url);
	};
	
	history.replaceState(page,page.title,page.url);
	W.onpopstate=onpopstate;

};


И тогда предыдущая функция станет такой

var hs= new HistoryStates();

var a=document.querySelectorAll('a.type-ajax');

for(var i=0;i<a.length;i++)

	a[i].addEventListener('click',

		function(e){
			e.preventDefault(); /* стопе */
			ajax({
				url:this.href,
				success:function(data){
					some_elem.innerHTML=data.html;
					/* в data должен быть .title этой страницы */
					hs.push(data); 
				}
			});
		}
	);


Но это еще не все. Откуда взять some_elem если кто-то нажал на пункт выпадающего меню? Его придется создать, то есть просто вставить в body элемент, получить его в переменную some_elem и показать поверх текущего контента в рамочке или сплошняком. А чтобы юзер не давил кнопку Назад желая выбраться из услуг, придется нарисовать кнопку Закрыть, где-то рядом с some_elem и повесить на нее скрытие окна и возврат к начальному адресу:

hs.restore()

Понял как все просто? )))

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

Последний раз редактировалось warren buffet, 13.08.2016 в 23:00.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по видимости переменных. yiooxir Angular.js 3 31.10.2013 12:37
data атрибуты для хранения ajax-данных oli AJAX и COMET 4 23.08.2013 10:33
не подключается filter в ie 6-7 shtopor Internet Explorer 4 23.03.2013 20:58
load data infile kilogram Серверные языки и технологии 5 09.07.2012 13:25
Использование combobox поля в grid dionic ExtJS 0 26.05.2011 14:12