Joomla 3.xで作成したWebサイトを持っていて、メニュー(Agence、Regie Pub、Sites Internet、Autres Services、Realizations、Contact)を作成しました。それぞれをクリックすると、ページのセクションにスムーズにリダイレクトされます。以前はPLUGINARIAの拡張スムーススクロールアンカーを使用していましたが、現在は無料ではないため、彼は動作しません。次に、テンプレートhelix 3 FrameworkでカスタムJavaScriptファイルを作成して、独自のスムーズスクロールを作成します。
これは私のメニューのコードです:
<div class="sp-megamenu-wrapper">
<a id="offcanvas-toggler" class="visible-sm visible-xs" href="#">
<i class="fa fa-bars"></i>
</a>
<ul class="sp-megamenu-parent menu-fade hidden-sm hidden-xs">
<li class="sp-menu-item current-item active"></li>
<li class="sp-menu-item">
<a class="scrollTo" href="#agence">Agence</a>
</li>
<li class="sp-menu-item">
<a class="scrollTo" href="#regie-pub">Régie pub</a>
</li>
<li class="sp-menu-item">
<a class="scrollTo" href="#sites-internet">Sites internet</a>
</li>
<li class="sp-menu-item">
<a class="scrollTo" href="#autres-services">Autres services</a>
</li>
<li class="sp-menu-item">
<a class="scrollTo" href="#realisations">Réalisations</a>
</li>
<li class="sp-menu-item">
<a class="scrollTo" href="#contact">Contact</a>
</li>
</ul>
私が持っているこの種のメニューでどうすればそれができるのか知りたいです。ワンページサイトの別のセクションにスクロールアンカーをスムーズにするにはどうすればよいですか。
よろしく、Lordaker
Aa Vanilla Javascript(jQueryより高速)のアプローチは次のようになります。
_document.addEventListener('DOMContentLoaded', function () {
function scrollTo(event) {
event.preventDefault();
var id = event.target.getAttribute('href').replace('#', '');
var el = document.getElementById(id);
if (el) {
el.scrollIntoView({behavior: 'smooth', block: 'start'});
}
}
var menuLinks = document.querySelectorAll('.scrollTo');
if (menuLinks.length > 0) {
for (var i = 0; i < menuLinks.length; i++) {
menuLinks[i].addEventListener('click', scrollTo);
}
}
}
_
Internet ExplorerとSafariでは、これらのブラウザーのどちらもscrollIntoView()
関数内のオプションをサポートしていないため、アニメーションスクロールは表示されません。
私が使用するこのJavaScriptコード:
//Smooth Scroll Menu
$(document).ready(function(){
$('ul.sp-megamenu-parent li.sp-menu-item > a').on('click', function(){
//Toggle Class
$(".active").removeClass("active");
$(this).closest('li').removeClass("active");
var theClass = $(this).attr("class");
$('.'+theClass).parent('li').addClass('active');
//Animate
$('html, body').stop().animate({
scrollTop: $( $(this).attr('href') ).offset().top - 0
}, 450);
return false;
});
});