Xwab
Форумыnavigate_nextHTML/CSS

Быстрые переходы по страницам
Сообщения
Виктор

Быстрые переходы наблюдаются ВКонтакте. Это очень удобно.
При переходе обновляется не вся страница, а её часть.
У меня есть способ, но у него 2 минуса.
Первый: При нажатии на среднюю кнопку мыши на ссылке, в новой вкладке открывается не содержимое ссылки, а главная страница сайта.
Второй: На кнопку "Назад" в Браузере сайт не реагирует. Лишь возвращает предыдущие ссылки в строке адреса.
Я не знаю как от этого избавиться.
Вот мой метод. Может поможете исправите.

Создаём функцию:
<script type="text/javascript">
function go(page){$.post(page, {mode: 'go'}, function(msg){$("#body").html(msg);});}
</script>

$.post('Адрес, куда отправляем', {Данные $_POST}, function(msg){$("#какой блок меняем(ид блока)").html(msg);})

Зачем я отправляю {mode: 'go'} на php это звучит так: $_POST['mode']='go';

Просто у меня в php файлах такой код:

if ($_POST['mode']<>'go')
include($path.'incl/foot_tpl.php'); // инклудим с шапкой
else
include($path.'incl/foot.php'); // инклудим без шапки

Иначе зачем нам две шапки, если одна уже имеется?)

А ссылки выглядят так:

<a href="#любой текст, он не повлияет ни на что(обязательно решётку(#) в начале)" onclick="go('ссылка на файл')">Название ссылки</a>

Например:

<a href="#/index" onclick="go('index.php')">Главная</a>

Вот полный пример:

<html>
<head>
<title>Привет</title>
<link rel="stylesheet" href="style/style.css" type="text/css">
<script type="text/javascript" src="/js/jQuery.js"></script>
<script type="text/javascript">
function go(page){$.post(page, {mode: 'go'}, function(msg){$("#body").html(msg);});}
</script>
</head>
<body>
<div class="begin_block">Меню сайта</div>
<div class="block"><a href="/#index" onclick="go('index.php')">Главная</a></div>
<div class="block"><a href="/#download" onclick="go('zagruzki.php')">Загрузки</a></div>
<div id="body">
Текст
</div>
</body>
</html>

18 Июн 2011, 14:49
iceman12

Там используется технология Pjax

20 Июн 2011, 21:16
Sich

<script type="text/javascript" src="/js/jQuery.js"></script>
Дай сам скрипт

21 Июн 2011, 19:58
Ruon

Мой сайт по центру или как? http:sotik.wup.ru

22 Июн 2011, 16:54
KinG

iceman12, а не aJax ли?

22 Июн 2011, 17:07
Виктор

Sich, это просто библия jQueqy
добавлено спустя 5 минут:
iceman12, я искал Pjax на примере там работает. Я только у себя не мог это всё сделать. Поэтому подумал, что не вариант. Но после твоей подсказки я подумаю над этим. Может быть и сделаю.

23 Июн 2011, 16:25
Ъb

могу поделится для jquery, гдето я видел такое дело и оптимизировал для себя...
добавлено спустя 13 минут:
var page = []; //// объявляем масси переменных куда будем записывать страницы на котрых были
var currentAnchor = ''; //// переменная равна пустоте как и изначально location.hash
$(document).ready(function () {
   page['title'] = document.title; //// записываем текущий заголовок страницы
   page['#' + location.pathname] = document.getElementById('page').innerHTML; //// записываем текущую страницу
   setInterval("checkAnchor()", 500); //// запускаем функцию, которая обновляется каждые 500мс
});

function checkAnchor() {
   if (currentAnchor != location.hash) { //// если хэш не равен переменной currentAnchor
      currentAnchor = location.hash; //// эта переменная равна хэшу
      if (!currentAnchor) { //// если эта переменная пустая вставляем страницу с которой начали
         document.title = page['title'];
         $("#page").html(page['#' + location.pathname]);
      }
      else //// иначе объявляем переменную, которая равна хэше без # (str_replace моя самописная функция можете обрезать сами как угодно)))
      {
         var lll = str_replace('#', '', window.location.hash);
      }

         if (!page[location.hash]) { //// если нет в массиве этой страницы, грузим..
            gruz_on();
            $('#fixed').hide();
            $.ajax({
               url: "/ajax_pages/" + lll,
               error: function (request, error) {
                  window.location.reload();
               },
               success: function (a) {
                  $("#page").html(a);
                  page[location.hash] = a;
               }
            });
         } else { //// ну а если есть, то вставляем эту страницу
            $("#page").html(page[location.hash]);
         }
   }
   return page;
}
добавлено спустя 1 минуту:
функция  для того чтобы принудительно загружать страницы даже те которые есть в массиве переменной page
function go(a) {
   if (!page['#' + a]) {
      currentAnchor = false;
      location.hash = a;
   } else {
      page['#' + a] = false;
      location.hash = a;
   }
}
добавлено спустя 1 минуту:
ну а ссылки <a href="index.php" onclick="go('index.php'); return false">Главная</a>

ну а страница загружается в диве с идентификатором page, можно пойти еще круче и использовать json вместо html, тогда скорость еще быстрее, но нагрузка на браузер сильная

24 Июн 2011, 21:24
Виктор

Ъb, Спасибо. Обязательно попробую.

26 Июн 2011, 13:52
Ответить на тему