jQuery(document).ready(function($){
var $menu=$('#fml-float-menu');
if($menu.length===0){
return;
}
var topPosition=fmlOptions.topPosition||'50%';
var currentTop=0;
if(topPosition.includes('%')){
var percent=parseFloat(topPosition);
var height=window.innerHeight;
if(typeof height==='undefined'||height===0){
requestAnimationFrame(function(){
height=window.innerHeight||document.documentElement.clientHeight;
currentTop=(height * percent) / 100;
updateMenuPosition();
});
height=document.documentElement.clientHeight||600;
}
currentTop=(height * percent) / 100;
}else{
currentTop=parseFloat(topPosition);
}
updateMenuPosition();
$(document).on('click', '.fml-button[data-type="menu"]', function(e){
e.preventDefault();
e.stopPropagation();
var $overlay=$('#fml-fullscreen-menu');
if($overlay.length){
openOverlay($overlay);
}
return false;
});
$(document).on('click', '.fml-button', function(e){
var $button=$(this);
var buttonType=$button.data('type');
if(buttonType==='scroll'){
e.preventDefault();
e.stopPropagation();
$('html, body').animate({
scrollTop: 0
}, 500);
return false;
}
if(buttonType==='menu'){
e.preventDefault();
e.stopPropagation();
var $overlay=$('#fml-fullscreen-menu');
if($overlay.length===0){
console.warn('Float Menu Lee: 오버레이 메뉴를 찾을 수 없습니다.');
return false;
}
openOverlay($overlay);
return false;
}
return true;
});
$menu.on('touchstart', '.fml-button[data-type="scroll"]', function(e){
e.preventDefault();
$('html, body').animate({
scrollTop: 0
}, 500);
return false;
});
function updateMenuPosition(){
var position=fmlOptions.position||'right';
$menu.css({
'top': currentTop + 'px',
'left': position==='left' ? '0':'auto',
'right': position==='right' ? '0':'auto',
'transform': 'translateY(-50%)'
});
}
var resizeTimer;
$(window).on('resize', function(){
clearTimeout(resizeTimer);
resizeTimer=setTimeout(function(){
requestAnimationFrame(function(){
var topPosition=fmlOptions.topPosition||'50%';
if(topPosition.includes('%')){
var percent=parseFloat(topPosition);
currentTop=(window.innerHeight * percent) / 100;
}
updateMenuPosition();
});
}, 100);
});
$(document).on('keydown', function(e){
if(e.key==='Escape'||e.keyCode===27){
closeOverlay($('#fml-fullscreen-menu'));
}});
$(document).on('click touchend', '.fml-dropdown-menu-list .menu-item-has-children > a', function(e){
var $li=$(this).parent();
var $subMenu=$li.find('.sub-menu').first();
if($subMenu.length > 0){
e.preventDefault();
e.stopPropagation();
$li.toggleClass('active');
$subMenu.toggleClass('active');
}});
$(document).on('click', '.fml-dropdown-menu-list a', function(e){
var $li=$(this).parent();
if($li.hasClass('menu-item-has-children')){
var $subMenu=$li.find('.sub-menu').first();
if($subMenu.length > 0){
return true;
}}
return true;
});
$(document).on('touchend', '.fml-dropdown-menu-list a', function(e){
return true;
});
function openOverlay($overlay){
$overlay.addClass('fml-overlay-open').attr('aria-hidden', 'false');
$('body').addClass('fml-no-scroll');
}
function closeOverlay($overlay){
$overlay.removeClass('fml-overlay-open').attr('aria-hidden', 'true');
$('body').removeClass('fml-no-scroll');
}
$(document).on('click', '[data-fml-close="true"]', function(e){
e.preventDefault();
closeOverlay($('#fml-fullscreen-menu'));
});
$(document).on('click', '.fml-overlay nav a', function(){
closeOverlay($('#fml-fullscreen-menu'));
});
});