Перенаправление на div на другой странице с плавной прокруткой?
Предыстория Вопроса:
У меня есть 2-страничный веб-сайт. Обе страницы используют один и тот же masterlayout.cshtml Страница с навигационной панелью. В навигационной панели есть ряд ссылок, которые прокручиваются вниз к соответствующим дивам на странице один на основе их идентификаторов.
Вопрос:
Когда я получаю доступ ко второй странице, Я больше не могу перенаправлять на указанные divs из ссылок Navbar на первой странице. Это имеет смысл, так как фокус больше не на первой странице, но как мне обойти эту проблему?
Код:
Вот код Navbar с набором идентификаторов div, обратите внимание на атрибуты data-id, указывающие, к какому div нужно перейти:
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#" class="scroll-link" data-id="Welcome">Welcome</a></li>
<li><a href="#" class="scroll-link" data-id="features">Club</a></li>
<li><a href="#" class="scroll-link" data-id="About">About Us</a></li>
<li><a href="#" class="scroll-link" data-id="Location">Location</a></li>
<li><a href='@Url.Action("FutureEvents", "Events", new { pageNo = 1 })'>Events</a></li>
</ul>
</div>
Пример div, который прокручивается до:
<div id="Welcome">
//HTML
</div>
JQuery используется для перехода к соответствующему div:
function scrollToID(id, speed) {
var offSet = 70;
var obj = $(id).offset();
var targetOffset = $(id).offset().top - offSet;
$('html,body').animate({ scrollTop: targetOffset }, speed);
}
Если кто-нибудь может помочь с созданием жизнеспособного решения, чтобы иметь возможность вызывать эти идентификаторы с другой страницы, это было бы здорово.
8 ответов:
Это можно сделать с помощью печенья. Установив файл cookie с
id, вы хотите прокрутить его, а затем, когда новая страница будет загружена, прочитать файл cookie и перейти к определенномуid. Я использовал очень популярный плагин jquery-cookie.Вот код JavaScript:
$(document).ready(function () { // Read the cookie and if it's defined scroll to id var scroll = $.cookie('scroll'); if(scroll){ scrollToID(scroll, 1000); $.removeCookie('scroll'); } // Handle event onclick, setting the cookie when the href != # $('.nav a').click(function (e) { e.preventDefault(); var id = $(this).data('id'); var href = $(this).attr('href'); if(href === '#'){ scrollToID(id, 1000); }else{ $.cookie('scroll', id); window.location.href = href; } }); // scrollToID function function scrollToID(id, speed) { var offSet = 70; var obj = $('#' + id); if(obj.length){ var offs = obj.offset(); var targetOffset = offs.top - offSet; $('html,body').animate({ scrollTop: targetOffset }, speed); } } });Здесь я подготовил минимальный пример с этой работой:
Http://plnkr.co/edit/l2aassM4biyNRWNCrvUz?p=preview
Примечание: нажмите на
Events, чтобы перейти к другому страница.
Вы можете отслеживать хэш url страницы и прокручивать страницу до определенного div
<a href="#Welcome" class="scroll-link">Welcome</a> <a href="your_page_url#Welcome" class="other-page">Welcome</a> <!-- link to other page scroll div -->Jquery
$(document).ready(function(){ var speed = 1000; // check for hash and if div exist... scroll to div var hash = window.location.hash; if($(hash).length) scrollToID(hash, speed); // scroll to div on nav click $('.scroll-link').click(function (e) { e.preventDefault(); var id = $(this).attr('href'); if($(id ).length) scrollToID(id, speed); }); }) function scrollToID(id, speed) { var offSet = 70; var obj = $(id).offset(); var targetOffset = obj.top - offSet; $('html,body').animate({ scrollTop: targetOffset }, speed); }
Вы можете попробовать что-то вроде этого. Я изменил data-id на id. Вы можете использовать javascript.
<ul class="nav navbar-nav"> <li><a href="#" class="scroll-link" onclick="scrollme(this.id)" id="Welcome">Welcome</a></li> <li><a href="#" class="scroll-link" onclick="scrollme(this.id)" id="features">Club</a></li> <li><a href="#" class="scroll-link" onclick="scrollme(this.id)" id="About">About Us</a></li> <li><a href="#" class="scroll-link" onclick="scrollme(this.id)" id="Location">Location</a></li> <li><a href='#' onclick="scrollme(this.id)" id="Event">Events</a></li> </ul>Javascript для прокрутки
function scrollme(id) { var scrollElem = scrollableElement('html', 'body'); var targetOffset = $(id).offset().top; $(scrollElem).animate({scrollTop: targetOffset-100}, 1000, function() { }); } function scrollableElement(els) { for (var i = 0, argLength = arguments.length; i <argLength; i++) { var el = arguments[i], $scrollElement = $(el); if ($scrollElement.scrollTop()> 0) { return el; } else { $scrollElement.scrollTop(1); var isScrollable = $scrollElement.scrollTop()> 0; $scrollElement.scrollTop(0); if (isScrollable) { return el; } } } return []; }
Как перенаправить на другую страницу, используя значение
href?Если да, то добавьте также
data-idдля этого тега<a>.Итак, когда вы нажимаете на ссылку события, она переходит на другую html-страницу, и вы хотите перейти к событиям div, верно?
Затем, используя
sessionStorage, Вы можете сохранить и получить обратно идентификатор страницы, а затем перейти к ее определенному div.Добавьте ниже скрипт и давайте посмотрим.
JQUERY
$(document).ready(function(){ // get sessionStorage for page id var get_id = sessionStorage.getItem('pg_id'); // check page id, then scroll to its div if(get_id) scrollToID(get_id, 300); // click event to scroll to div $('.nav li a').on('click', function(){ var id = '#'+$(this).data('id'); sessionStorage.setItem('pg_id', id); scrollToID(id, 300); }); }); function scrollToID(id, speed) { var offSet = 70; var obj = $(id).offset(); var targetOffset = $(id).offset().top - offSet; $('html,body').animate({ scrollTop: targetOffset }, speed); }HTML (мой пример)
<ul class="nav navbar-nav"> <li><a href="#" class="scroll-link" data-id="Welcome">Welcome</a></li> <li><a href="#" class="scroll-link" data-id="features">Club</a></li> <li><a href="#" class="scroll-link" data-id="About">About Us</a></li> <li><a href="#" class="scroll-link" data-id="Location">Location</a></li> <li><a href='page2.html' data-id="Event">Events</a></li> <!-- use your script to redirect to another page, but add "data-id" --> </ul>
Если я правильно понимаю, что вы имеете в виду. Чем вы можете просто сделать это, что такое iFrame. В навигационной панели для каждой вкладки просто поместите
href='#welcome'илиhref='#features'и затем дайте iFrame дляwelcomeAIDofwelcome. При нажатии на вкладку дляwelcome. Вы будете отправлены в iFrame с содержимымwelcome. Дляfeaturesсделайте то же самое и для всех следующих вкладок.
Самый простой способ-создать другую навигационную панель для другой страницы, с которой вы хотите перенаправить своих конечных пользователей
Попробуйте это:
Сначала создайте файл.php или первый.html
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <style> .t{ min-height: 200px; border: 2px solid; } </style> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="#" class="scroll-link" data-id="Welcome">Welcome</a></li> <li><a href="#" class="scroll-link" data-id="features">Club</a></li> <li><a href="#" class="scroll-link" data-id="About">About Us</a></li> <li><a href="#" class="scroll-link" data-id="Location">Location</a></li> <li><a href='@Url.Action("FutureEvents", "Events", new { pageNo = 1 })'>Events</a></li> </ul> </div> <div id = 'Welcome' class="t"> </div> <div id = 'features' class="t"> </div> <div id = 'About'class="t"> </div> <div id = 'Location' class="t"> </div> <div id ='div_101' class="t"> scroll upto here </div> <script> function getParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } $(document).ready(function(){ var param_scroll = getParameterByName('id'); if(param_scroll){ $('html, body').animate({ scrollTop: $("#"+param_scroll).offset().top }, 3000); } }); </script>Затем второй файл с другой навигационной панелью
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="first_page.php?id=Welcome" class="scroll-link" data-id="Welcome">Welcome</a></li> <li><a href="first_page.php?id=features" class="scroll-link" data-id="features">Club</a></li> <li><a href="first_page.php?id=About" class="scroll-link" data-id="About">About Us</a></li> <li><a href="first_page.php?id=Location" class="scroll-link" data-id="Location">Location</a></li> <li><a href='@Url.Action("FutureEvents", "Events", new { pageNo = 1 })'>Events</a></li> </ul> </div>
Я думаю, что вы можете использовать
$.cookieкаждый раз, когда вы прокручиваете первую страницу.Например:
$(document).ready(function() { $('.scroll-link').on("click",function() { $.cookie('page',$(this).attr('data-id')); }); if($.cookie('page') != null || $.cookie('page') != "") { scrollToID($.cookie('page'), 1000); } })
Вы можете отправить идентификатор div, который вы хотите прокрутить, на вторую страницу через строку запроса URL и написать сценарий (на странице 2), чтобы прочитать URL и прокрутить до указанного div. Кусок пирога.
Comments