Нажмите тег привязки, перейдите на новую страницу, затем выделите ID с этой страницы [дубликат]

Я получаю «fs.readFileSync не функция» в отладчике Chrome после попытки вызова readFileSync ();

blockquote>

fs не будет работать в браузер. Это по дизайну, чтобы защитить вашу файловую систему от потенциальных угроз безопасности.

Использование пакетов узла низкого уровня в среде браузера

Если вам нужен доступ к этому в среде браузера, подумайте об использовании Electron , который позволит вам использовать пакеты NodeJS уровня ОС в запущенном экземпляре Chromium.

46
задан Zach Saucier 18 February 2016 в 17:20
поделиться

7 ответов

Вам в основном нужно это сделать:

  • включить целевой хэш в ссылку, указывающую на другую страницу (href="other_page.html#section")
  • в вашем обработчике ready очистите прокрутку жесткого перехода, обычно продиктованную хешем, и как можно скорее прокрутите страницу назад и вызовите jump() - вам нужно сделать это асинхронно
  • в jump(), если нет события задан location.hash целевой
  • , также этот метод может не поймать скачок во времени, поэтому вам лучше скрыть html,body сразу и показать его, как только вы прокрутите его до нуля

Это ваш код с добавленным выше:

var jump=function(e)
{
   if (e){
       e.preventDefault();
       var target = $(this).attr("href");
   }else{
       var target = location.hash;
   }

   $('html,body').animate(
   {
       scrollTop: $(target).offset().top
   },2000,function()
   {
       location.hash = target;
   });

}

$('html, body').hide();

$(document).ready(function()
{
    $('a[href^=#]').bind("click", jump);

    if (location.hash){
        setTimeout(function(){
            $('html, body').scrollTop(0).show();
            jump();
        }, 0);
    }else{
        $('html, body').show();
    }
});

Проверено в Chrome / Safari, Firefox и Opera. Не знаю об IE, хотя.

61
ответ дан Petr Vostrel 21 August 2018 в 08:05
поделиться
  • 1
    Я привел рабочий пример в режиме онлайн: vostrel.cz/so/9652944/page.html Также я заметил, что в приведенном выше скрипте не было показано скрытое тело без хеша. Исправлено с помощью добавления else к условию в .ready() – Petr Vostrel 26 March 2012 в 11:34
  • 2
    Спасибо друг. Это было блестящее решение. Это именно то, чего я хочу. теперь я могу добавить какой-либо эффект самостоятельно. сначала у вас есть очки награды, и вы это заслужили. – Digital site 26 March 2012 в 14:25
  • 3
    BTW, я протестировал его и работает во всех браузерах. Большое спасибо. – Digital site 26 March 2012 в 20:46
  • 4
    Странно, когда я пытаюсь использовать этот код, исчезает вся моя страница? – Dikeneko 12 August 2016 в 11:25
  • 5
    @PetrVostrel для меня ваша ссылка не анималирует прокрутку при переходе на вторую страницу. Он сразу же переходит к ID ... Это действительно работает для вас? – trainoasis 25 January 2018 в 14:34

Я хотел бы рекомендовать использовать плагин scrollTo

http://demos.flesler.com/jquery/scrollTo/

Вы можете set scrollto с помощью jquery css selector.

$('html,body').scrollTo( $(target), 800 );

Мне повезло с точностью этого плагина и его методов, где другие методы достижения такого же эффекта, как использование .offset() или .position(), для меня в прошлом не было перекрестного браузера. Не говоря, что вы не можете использовать такие методы, я уверен, что есть способ сделать это кросс-браузер, я только что нашел scrollTo, чтобы быть более надежным.

6
ответ дан Fresheyeball 21 August 2018 в 08:05
поделиться
  • 1
    Спасибо за ответ. Это решение, которое я знаю, и, насколько я помню, оно используется для прокрутки на странице, а не от страницы до другой страницы, а затем прокрутки до цели. извините, но спасибо в любом случае за попытку. – Digital site 25 March 2012 в 20:45
  • 2
    Это возможно только для прокрутки внутри документа или элементов документа. Я не понимаю, что вы подразумеваете под «страницей». Вы не можете перейти к другому документу. – Fresheyeball 26 March 2012 в 17:37
  • 3
    может быть, это немного запутанно. когда вы нажимаете на ссылку на странице A, чтобы перейти на страницу B, прокрутите вниз до элемента div. Это то, чего я хочу достичь, но это o.k, решение там. спасибо за попытку – Digital site 26 March 2012 в 20:45
  • 4
    yup мое решение делает это. Однако не беспокойтесь, выберите ответ, который работает для вас. – Fresheyeball 27 March 2012 в 01:55
  • 5
    Я знаю, что это старый, но это не scrollto больше использования плагина для scroll.local – Akyl 7 September 2012 в 15:25

Я написал что-то, что определяет, содержит ли страница якорь, на который была нажата кнопка, а если нет, переходит на обычную страницу, иначе она прокручивается до определенного раздела:

$('a[href*=\\#]').on('click',function(e) {

    var target = this.hash;
    var $target = $(target);
    console.log(targetname);
    var targetname = target.slice(1, target.length);

    if(document.getElementById(targetname) != null) {
         e.preventDefault();
    }
    $('html, body').stop().animate({
        'scrollTop': $target.offset().top-120 //or the height of your fixed navigation 

    }, 900, 'swing', function () {
        window.location.hash = target;
  });
});
0
ответ дан John-Henry 21 August 2018 в 08:05
поделиться

На ссылке помещается хэш:

<a href="otherpage.html#elementID">Jump</a>

И на другой странице вы можете сделать:

$('html,body').animate({
  scrollTop: $(window.location.hash).offset().top
});

На другой странице вы должны иметь элемент с установленным идентификатором до elementID для прокрутки до. Конечно, вы можете изменить его название.

19
ответ дан Sarfraz 21 August 2018 в 08:05
поделиться
  • 1
    Спасибо за ответ. Я попробую его и предоставит некоторую обратную связь, когда это будет сделано. еще раз спасибо – Digital site 11 March 2012 в 09:43
  • 2
    Я попробовал, но не работал. Я думаю, что либо я что-то упустил, либо что-то не так. Я сделал хэш на ссылке href и все еще не уверен, где разместить другой код. И в результате, когда я нажимаю на ссылку, она переходит непосредственно на страницу в div без прокрутки к ней, что странно. Я считаю, что код имеет какое-то отношение к этому, так что гладкая прокрутка работает ... любая идея, как обойти это? – Digital site 11 March 2012 в 10:11
  • 3
    Всем спасибо за ответы. Я проверю все ваши ответы, когда я закончу то, что у меня есть сейчас. – Digital site 24 March 2012 в 14:44
  • 4
    простой и чистый ... – khurram 1 January 2014 в 08:19
  • 5
    Это работает для меня. Я комментирую его для тех, кто в этом нуждается. – Alberto Rubio 18 May 2016 в 05:01

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

jQuery(function ($) {

    /**
     * This small plugin will scrollTo a target, smoothly
     *
     * First argument = time to scroll to the target
     * Second argument = set the hash in the current url yes or no
     */
    $.fn.smoothScroll = function(t, setHash) {
        // Set time to t variable to if undefined 500 for 500ms transition
        t = t || 500;
        setHash = (typeof setHash == 'undefined') ? true : setHash;

        // Return this as a proper jQuery plugin should
        return this.each(function() {
            $('html, body').animate({
                scrollTop: $(this).offset().top
            }, t);

            // Lets set the hash to the current ID since if an event was prevented this doesn't get done
            if (this.id && setHash) {
                window.location.hash = this.id;
            }
        });
    };

});

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

(сценарий должен находиться в разделе onload)

if (window.location.hash) {
    window.scrollTo(0,0);
    $(window.location.hash).smoothScroll();
}

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

(скрипт должен быть в пределах секции onload)

$('a[href^="#"]').click(function(e) {
    e.preventDefault();

    $($(this).attr('href')).smoothScroll();
});

Поскольку jQuery ничего не делает, если само совпадение не выполняется, у нас есть хороший резерв, когда цель на странице не может быть найдена yay \ o /

Обновить

Альтернативный обработчик onclick для прокрутки вверху, когда theres только хеш:

$('a[href^="#"]').click(function(e) {
    e.preventDefault();
    var href = $(this).attr('href');

    // In this case we have only a hash, so maybe we want to scroll to the top of the page?
    if(href.length === 1) { href = 'body' }

    $(href).smoothScroll();
});

Вот также простой jsfiddle, который демонстрирует прокрутку внутри страницы , onload немного сложно настроить ...

http://jsfiddle.net/sg3s/bZnWN/

Обновление 2

Таким образом, у вас могут возникнуть проблемы с тем, что окно уже прокручивается до элемента onload. Это исправляет: window.scrollTo(0,0); он просто прокручивает страницу влево. Добавили его в фрагмент кода выше.

2
ответ дан sg3s 21 August 2018 в 08:05
поделиться
  • 1
    Спасибо за ответ. Код хорош, но не может использоваться с другой страницы на другую страницу, а затем прокручивается вниз до цели. Еще раз спасибо за усилия. – Digital site 25 March 2012 в 20:49
  • 2
    Если в этом случае ваша идея не была понятна любому из нас ... Если вы уточните вопрос, я готов дать ему еще одну попытку: | – sg3s 25 March 2012 в 20:53
  • 3
    Спасибо, но у меня нет никаких проблем, если вы услышите какой-либо ответ. если бы срок действия бонуса истек, я переустановил новый, поскольку этот вопрос важен для меня. еще раз спасибо – Digital site 25 March 2012 в 20:59
function scroll_down(){
    $.noConflict();
    jQuery(document).ready(function($) {
        $('html, body').animate({
            scrollTop : $("#bottom").offset().top
        }, 1);
    });
    return false;
}

здесь «bottom» - это идентификатор тега div, куда вы хотите перейти. Для изменения эффектов анимации вы можете изменить время от «1» до другого значения

2
ответ дан user 21 August 2018 в 08:05
поделиться
  • 1
    Спасибо @vijayrk за ответ. Этот код также предназначен для прокрутки на странице, а не с одной страницы на другую для прокрутки цели. – Digital site 25 March 2012 в 20:47
  • 2
    Значит ли это, что вы хотите написать jquery на родительской странице, чтобы эффект произошел на дочерней странице? то есть у вас есть страница, где у вас есть ссылка на pageB. PageB имеет div, называемый - «abc». Значит ли это, что вы хотите написать jquery в PageA, так что, когда вы нажимаете на PageB, это нужно для деления на странице B? – user 26 March 2012 в 00:36
  • 3
    не совсем, приятель. У меня есть ссылка для страницы B на стр. A., когда я нажимаю эту ссылку, я перехожу на страницу B и прокручиваю вниз до элемента div C ... – Digital site 26 March 2012 в 14:22

Объединив ответы Петра и Сарфраза, я пришел к следующему.

На странице1.html:

<a href="page2.html#elementID">Jump</a>

На странице2.html:

<script type="text/javascript">
    $(document).ready(function() {
        $('html, body').hide();

        if (window.location.hash) {
            setTimeout(function() {
                $('html, body').scrollTop(0).show();
                $('html, body').animate({
                    scrollTop: $(window.location.hash).offset().top
                    }, 1000)
            }, 0);
        }
        else {
            $('html, body').show();
        }
    });
</script>
9
ответ дан zanetu 21 August 2018 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: