(()=>{ "use strict"; $((function() { var t = 0; const e = $(".js-siteHeader") , n = $(".js-drawerMenu") , o = "is-fixed"; $(window).on("scroll", (function() { $(this).scrollTop() < 500 || $(this).scrollTop() < t || $(this).scrollTop() == t ? (e.removeClass(o), n.removeClass(o)) : (e.addClass(o), n.addClass(o)), t = $(this).scrollTop() } )) } )); const t = $(".js-drawerMenu") , e = document.querySelector('[data-js-drawer="button"]'); e.addEventListener("click", (()=>{ const n = window.innerWidth - document.body.clientWidth; e.classList.toggle("is-active"), t.toggleClass("is-open"), e.classList.contains("is-active") ? (document.documentElement.style.paddingRight = `${n}px`, document.documentElement.style.overflow = "hidden") : (document.documentElement.style.paddingRight = "", document.documentElement.style.overflow = "") } )), $((function() { $(".dropdownBtn").hover((function() { subHeight = $(this).children(".submenu").height(), $(".submenu").removeClass("active"), subHeight <= 0 ? $(this).children(".submenu").addClass("active") : $(this).children(".submenu").removeClass("active") } )) } )), // SNSボタンのリンク先 $((function() { var t; $('[data-js-sns-modal="button"]').on("click", (function() { const t = $(this).data("jsSnsTarget"); if(t=='x'){ location.href = 'https://twitter.com/knb_tv'; }else if(t=='facebook'){ location.href = 'https://www.facebook.com/knbtvradio/'; }else if(t=='youtube'){ location.href = 'https://www.youtube.com/channel/UCX5d3AvqSXbnvvf12BTlgIA'; }else if(t=='instagram'){ location.href = 'https://www.instagram.com/knb_tv/'; } } )), t = "https://page.line.me/knb-tv.radio?openQrModal=true", $(".snsIconWrap li" + ".iconLine").on("click", (function() { window.open(t, "_blank") } )) } )), $(document).ready((function() { const t = $(".js-siteHeader").height(); $('a[href*="#"]').click((function() { if (location.pathname.replace(/^\//, "") == this.pathname.replace(/^\//, "") && location.hostname == this.hostname) { var e = $(this.hash); if ((e = e.length && e || $('[name=" + this.hash.slice(1) + "]')).length) { var n = e.offset().top - t; return $("html,body").animate({ scrollTop: n }, 500), !1 } } } )) } )), $((function() { $(".httpText").each((function() { $(this).html($(this).html().replace(/((http|https|ftp):\/\/[\w?=&.\/-;#~%@-]+(?![\w\s?&.\/;#~%"=-]*>))/g, '$1')) } )) } )) } )(); /** * ヘッダーをスマートフォンでは下スクロールでヘッダーを非表示、上スクロールで再表示 */ class ScrollDownHeader { constructor() { this.didScroll = false; this.lastScrollTop = 0; this.delta = 5; this.headerHeight = document.querySelector('.js-siteHeader').offsetHeight; this.init(); } init() { document.addEventListener('scroll', this.hasScrolled.bind(this)); } hasScrolled() { const st = window.scrollY; if (Math.abs(this.lastScrollTop - st) <= this.delta) { return; } if (st > this.lastScrollTop && st > this.headerHeight) { // Scroll Down document.documentElement.classList.add('is-scrollDown'); } else { // Scroll Up if (st + window.innerHeight < document.documentElement.scrollHeight) { document.documentElement.classList.remove('is-scrollDown'); } } this.lastScrollTop = st; } } window.addEventListener("DOMContentLoaded", () => { const scrollDownHeader = new ScrollDownHeader(); }) /** * スマートフォンサイズの場合、ヘッダー下に表示されるナビゲーションスライダーを現在のページリンクまで移動します。 */ window.addEventListener("DOMContentLoaded", () => { const headerNavigationSp = () => { const headerSliderList = document.querySelector('[data-js-header-slider="list"]'); const headerSliderItem = document.querySelector('[data-js-header-slider="current"]'); if(headerSliderItem) { const width = headerSliderItem.getBoundingClientRect().width; const x = headerSliderItem.getBoundingClientRect().left; const y = headerSliderItem.getBoundingClientRect().top; headerSliderList.scrollLeft += x - width; } } headerNavigationSp(); }) /** * SPヘッダー検索開閉 */ const searchOpen = () => { const siteHeader = document.querySelector('.js-siteHeader'); const searchOpenButton = document.querySelector('[data-js-search-open="button"]'); const searchOpenBody = document.querySelector('[data-js-search-open="body"]'); const searchOpenoverlay = document.querySelector('[data-js-search-open="overlay"]'); const toggleClassName = 'is-active'; searchOpenButton.addEventListener('click', () => { searchOpenButton.classList.toggle(toggleClassName); searchOpenBody.classList.toggle(toggleClassName); searchOpenoverlay.classList.toggle(toggleClassName); siteHeader.classList.toggle('is-searchOpen'); }) searchOpenoverlay.addEventListener('click', () => { searchOpenButton.classList.remove(toggleClassName); searchOpenBody.classList.remove(toggleClassName); searchOpenoverlay.classList.remove(toggleClassName); siteHeader.classList.remove('is-searchOpen'); }) } document.addEventListener("DOMContentLoaded", (event) => { searchOpen(); }) class DropdownMenu { constructor() { this.buttons = document.querySelectorAll('.js-headerDropdawnBtn'); this.menus = document.querySelectorAll('.js-headerDropdawnMenu'); this.links = document.querySelectorAll('.js-headerDropdawnLink'); this.init(); } init() { this.buttonAction() this.menuAction() } buttonAction() { this.buttons.forEach(button => { button.addEventListener('mouseover', () => { this.menuOpen(button); }); button.addEventListener('focus', () => { this.menuOpen(button); }); button.addEventListener('mouseleave', () => { this.menuClose(button); }); button.addEventListener('blur', () => { this.menuClose(button); }); }) } menuAction() { this.menus.forEach(menu => { menu.addEventListener('mouseenter', () => { const thisMenu = menu; this.menuOpen(thisMenu); }); menu.addEventListener('mouseleave', () => { const thisMenu = menu; this.menuClose(thisMenu); }); this.links.forEach(link => { link.addEventListener('focus', () => { const thisMenu = link.closest('.js-headerDropdawnMenu'); this.menuOpen(thisMenu); }); link.addEventListener('blur', () => { const thisMenu = link.closest('.js-headerDropdawnMenu'); this.menuClose(thisMenu); }); }) }) } menuOpen(elm) { let adjacentElm; if(elm.classList.contains('js-headerDropdawnBtn')) { adjacentElm = elm.nextElementSibling; } else { adjacentElm = elm.previousElementSibling; } elm.classList.add('is-active'); adjacentElm.classList.add('is-active'); } menuClose(elm) { let adjacentElm; if(elm.classList.contains('js-headerDropdawnBtn')) { adjacentElm = elm.nextElementSibling; } else { adjacentElm = elm.previousElementSibling; } elm.classList.remove('is-active'); adjacentElm.classList.remove('is-active'); } } const dropdownMenu = new DropdownMenu();