2014-02-21 1 views
2

Я работаю над этим сценарием в течение нескольких часов, и я, наконец, в недоумении. Я почти уверен, что видел это раньше, но это может быть невозможно, и я не хочу тратить больше времени, если это даже невозможно.Оставьте страницу при нажатии кнопки, после того, как новые загрузки страницы начнут плавное прокручивание до указанного места.

Я хотел бы нажать кнопку, загрузить новый URL-адрес, после того как документ будет готов, я бы хотел, чтобы он автоматически сглаживал прокрутку до указанного местоположения на этой странице с помощью анимации (поэтому он прокручивается ровно, и я могу управлять скорость перехода).

Я думал, что-то вроде этого будет работать. Я могу быть рядом, но без сигары!

JS:

$("#backToWorkBtn").click(function() { 

    window.location.href = "index.php"; 

    $(window).on("load", function() { 
     $('html,body').animate({ 
      scrollTop: $("#workSection").offset().top 
     }, 800); 
    }); 
}); 

Я также пробовал ...

$("#backToWorkBtn").click(function() { 

    window.location.href = "index.php"; 

    $(document).ready(function() { 
     $('html,body').animate({ 
      scrollTop: $("#workSection").offset().top 
     }, 800); 
    }); 
}); 

HTML:

ниже на gallery.php

<a id="backToWorkBtn">BACK TO MY WORK</a> 

ниже на index.php

<section id="introSection"> 
    Intro Area 
</section> 

<section id="aboutSection"> 
    About Me Area 
</section> 

<section id="workSection"> 
    <a href="gallery.php">Web Design</a> 
    <a href="gallery.php">Print Design</a> 
    etc etc etc.. 
</section> 

ответ

0

Хорошо, я наконец-то решил эту проблему сегодня. Это было немного больно, но в целом у меня теперь есть работа. Я использую строку запроса (которую вы можете замаскировать в URL-адресе, если хотите потратить время на построение этой логики). Это, по крайней мере, является отправной точкой для создания и улучшения. Спасибо, Брэндон Бун, за помощь!

Page 1 (index.php)

<script> 
function GetQueryVariable(query, name) { 
    if (query.indexOf("?") == 0) { query = query.substr(1); } 
    var pairs = query.split("&"); 
    for (var i = 0; i < pairs.length; i++) { 
     var pair = pairs[i].split("="); 
     if (pair[0] == name) { 
      return pair[1]; 
     } 
    } 
    return ""; 
} 

var pageMark = GetQueryVariable(location.search, "id"); 

$(function() { 
    $('html, body').animate({ 
     scrollTop: $('#' + pageMark).offset().top 
    }, 2000); 
    return false; 
}); 
</script> 

<section id="introSection"> 
    Stuff Here 
</section> 

<section id="aboutSection"> 
    Stuff Here 
</section> 

<section id="workSection"> 
    <a href="gallery.php">Web Work</a> 
</section> 

<section id="faqSection"> 
    Stuff Here 
</section> 

Page 2 (gallery.php)

<a href="index.php?id=workSection">GO BACK TO MAIN PAGE</a> 
0

Включите их. .click() обработчики должны перейти в готовую функцию.

$(document).ready(function() { 
    $('html,body').animate({ 
     scrollTop: $("#workSection").offset().top 
    }, 800); 

    $("#backToWorkBtn").click(function() { 
     window.location.href = "index.php"; 
    }); 
}); 
0

Вы можете использовать jQuery.scrollTo плагин Ариэля Flesler для достижения этой цели.

Проверьте это: Live Demo


Page 1:

JS

$('#myButton').click(function(){ 
    window.location.href = 'http://fiddle.jshell.net/TLeHz/3/show/?scroll=scrollToMe'; 
}); 

HTML

<input id='myButton' type='button' value='navigate' /> 

Page 2:

JS

$(function(){ 
    //From: http://stackoverflow.com/a/901144/402706 
    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, " ")); 
    } 

    //Scroll based on the value of the Query String param 'scroll' 
    var scrollToArea = getParameterByName('scroll'); 
    if(scrollToArea){ 
     $.scrollTo('#' + scrollToArea, 800);   
    } 

}); 

HTML

<div>test</div> 
<div>test</div> 
<div>test</div> 
<div>test</div> 
<div id='scrollToMe'>scroll to me</div> 

CSS

div{ 
    height:500px; 
} 
+0

Спасибо за реагирование Brandon, оценит его. На самом деле у меня есть scrollto, когда кнопка находится на той же странице, что и контейнер ... но я пытаюсь сделать это, нажав кнопку на gallery.php, которая приведет вас к другой странице (index.php), после того, как index.php загрузит документ, он инициирует scrollto на index.php и прокручивает сверху до #workSection. Кнопка не находится на одной странице, надеясь, что это имеет смысл. –

+0

Разве вы не описали точную функциональность, которую я демонстрирую? Возможно, я вас не понимаю. Ваша 'gallery.php' с помощью кнопки - это« Страница 1 »с кнопкой (« navigate »). Ваш 'index.php', который должен загружать и запускать scrollto сверху до' # workSection', - это моя 'Страница 2', которая инициирует прокрутку в верхней части до' # scrollToMe'. Нажав на кнопку 'navigate', моя ссылка« Live Demo »(которая также« Страница 1') показывает, как эти страницы работают вместе. Вы должны иметь возможность использовать эту точную методологию для выполнения ваших последующих действий. Дайте мне знать, что я пропустил. –

+0

А, нет, вы очень близко ... но я хочу, чтобы scrollto на странице 2 (index.php) начал, если нажата кнопка на странице 1 (gallery.php). В вашем примере scrollto будет запускаться на странице каждый раз, когда страница загружается, была ли нажата кнопка или нет. Чтобы дать некоторый контекст ... Индексная страница - очень длинная страница со ссылкой на галерею о середине страницы.когда вы переходите в галерею и нажимаете кнопку «Назад», действие по умолчанию возвращает вас на страницу индекса, но вверху, а затем пользователю нужно вручную прокрутить весь путь назад до раздела галереи, который они только что оставили. –

Смежные вопросы