2015-10-10 4 views
1

Назовите меня глупым, но я этого не вижу. Я сделал страницу Joomla со ссылками на разделы на той же странице. очень простой: <a href="#sed">, а затем <p id="sed">. Я включаю JQuery, как это:Плавная прокрутка до упора на той же странице

<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script> 

Она является частью Joomla 3.

Я использую этот сценарий из CSS-Tricks, который я положил в страницы:

<script> 
$(function() { 
    $('a[href*=#]:not([href=#])').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 

     var target = $(this.hash); 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
     $('html,body').animate({ 
      scrollTop: target.offset().top 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 
</script> 

I 'скрипел с CSS Tricks sample page (копировал/вставлял его в свой собственный HTML-редактор и менял немного кода), и да, он работает, но я не могу заставить его работать на моей собственной странице. Страница просто перескакивает на якорь, но не прокручивается плавно.

Имейте в виду: я не знаю ничего JavaScript или JQuery, так что терпите меня ... к специалисту JQuery это должно быть кусок пирога ....

Вот тестовая страница я сделал : http://test.tomhiemstra.nl.

Любая помощь приветствуется.

Cheers,

Thom

+0

Что-то, кажется, неправильно с JQuery на странице, пытаясь выбрать любой элемент возвращает нуль. Например, просто вставив '$ ('a')' в консоль –

ответ

0

Вы можете попробовать это

$('a[href^="#"]').click(function(event) { 
 
\t event.preventDefault(); 
 
\t var target = $(this).attr("href").substring(1); 
 
\t if(target) { 
 
\t \t $('html,body').animate({ 
 
      scrollTop: $('[name=' + target +']').offset().top 
 
     }, 1000); 
 
\t } 
 
});

1

Я не мог понять, что причиной этого, но на вашей странице $ ISN» t получать признание. Замените все $ в вашем скрипте на jQuery, и он работает.

jQuery(function() { 
    jQuery('a[href*=#]:not([href=#])').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 

     var target = jQuery(this.hash); 
     target = target.length ? target : jQuery('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
     jQuery('html,body').animate({ 
      scrollTop: target.offset().top 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 

С другой стороны, это, вероятно, лучше, чтобы обернуть вашу функцию в одном, что будет сопоставлена ​​$ к jQuery.

(function ($) { 
    $(function() { 
     $('a[href*=#]:not([href=#])').click(function() { 
      if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { 

       var target = $(this.hash); 
       target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 
       if (target.length) { 
        $('html,body').animate({ 
         scrollTop: target.offset().top 
        }, 1000); 
        return false; 
       } 
      } 
     }); 
    }); 
})(jQuery); 
+0

Hey Talya S., Большое спасибо. Я бы никогда не справился с этим сам. Я изменил $ на jQuery, и он сработал.После этого я добавил код, который вы предложили сценарию, который я нашел с помощью $, и он также работал. Я опубликую ниже, что в конечном итоге работает на сайте. Вопрос для вас: как вы узнали, что случилось? Это было с помощью консоли Google Chrome? –

+0

Да, с консолью Chrome (хотя у других браузеров есть свои). Я действительно вставил скрипт другого ответчика туда и получил сообщение об ошибке «Uncaught TypeError: Не могу прочитать свойство« click »из null (...)», поэтому я попытался сыграть с разными селекторами, пока не заметил, что даже самые простые из них не работают (как я показал в комментарии о '$ ('a')') –

0

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

<script> 
    (function ($) { 
$(function() { 
    $('a[href*=#]:not([href=#])').click(function() { 
     if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { 

      var target = $(this.hash); 
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 
      if (target.length) { 
       $('html,body').animate({ 
        scrollTop: target.offset().top 
       }, 1000); 
       return false; 
      } 
     } 
    }); 
}); 
})(jQuery); 
</script> 

ли я добавить слишком много скобок или слишком мало?

Однако я все еще не понимаю, почему $ не был признан как jQuery, что является одной из самых основных вещей, которые вы изучили в jQuery (да, я пришел так далеко: -P). Если кто-нибудь может прояснить это мне «как мне четыре года».

Thanx снова Talya С. и мои извинения за опечатку :-)

Thom

+0

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

+0

Также, если есть вещи, которые вы все еще не понимаете (например, почему $ не распознается на вашей странице), вы можете создать новый вопрос или отредактировать это один. Новый ответ действительно не тот. –

+0

Вы были так правы, @ Talya S, я повторял сценарий. Я думал, что решение, которое вы дали, было обложкой, которую вы упомянули, но вы добавили обертку к моему сценарию. Я не смотрел :-) –

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

  • Нет связанных вопросов^_^