<script>
var Webflow = Webflow || []
Webflow.push(function ()
{
const dropdownGroups = document.querySelectorAll('[fc-dropdown = group]')
setupDropdownGroups(dropdownGroups)
if(sessionStorage['fc-dropdown-id'] !== undefined)
openTargetDropdown()
else
{
openAutomaticDropdown()
window.addEventListener('resize', function()
{
openAutomaticDropdown()
})
}
})
Webflow.push(function () {
const sources = document.querySelectorAll('[fc-dropdown-source]')
if(sources.length <= 0)
return
for(const source of sources)
{
source.addEventListener('click', function(event)
{
const identifier = source.getAttribute('fc-dropdown-source')
const link = source.getAttribute('href')
event.preventDefault()
sessionStorage['fc-dropdown-id'] = identifier
window.location = link
})
}
})
function setupDropdownGroups(dropdownGroups)
{
if(dropdownGroups === null)
return
for(const group of dropdownGroups)
{
const dropdowns = group.querySelectorAll('.w-dropdown')
for(const dropdown of dropdowns)
{
dropdown.addEventListener('click', function()
{
group.interacted = true
})
}
}
}
function openTargetDropdown()
{
const identifier = sessionStorage['fc-dropdown-id']
sessionStorage.removeItem('fc-dropdown-id')
const targets = document.querySelectorAll('[fc-dropdown-target]')
let targetIds = []
for(const target of targets)
targetIds.push(target.getAttribute('fc-dropdown-target'))
for(let i = 0; i < targetIds.length; i++)
{
if(identifier === targetIds[i])
{
const dropdownGroup = targets[i].closest('[fc-dropdown = group]')
if(dropdownGroup !== null)
dropdownGroup.interacted = true
openDropdown(targets[i])
targets[i].scrollIntoView({ behavior: "smooth", block: "center" })
break
}
}
}
function openAutomaticDropdown()
{
const dropdowns = document.querySelectorAll('[fc-dropdown-behavior = open]')
if(dropdowns.length <= 0)
return
else if(dropdowns.length === 1)
{
const dropdown = dropdowns[0]
const dropdownGroup = dropdown.closest('[fc-dropdown = group]')
if(dropdownGroup !== null && dropdownGroup.interacted)
return
if(checkBreakpoint(dropdown))
{
closeDropdown(dropdown)
return
}
openDropdown(dropdown)
}
else
{
let options = {
threshold: 0,
}
let callback = (entries, observer) => {
entries.forEach((entry) => {
const dropdownGroup = entry.target.closest('[fc-dropdown = group]')
if(dropdownGroup !== null && dropdownGroup.interacted)
return
if(entry.isIntersecting)
{
if(checkBreakpoint(entry.target))
{
closeDropdown(entry.target)
return
}
openDropdown(entry.target)
}
})
}
let observer = new IntersectionObserver(callback, options)
for(const dropdown of dropdowns)
observer.observe(dropdown)
}
}
function checkBreakpoint(dropdown)
{
const breakpoints = { tablet: 991, landscape: 767, portrait: 478 }
const dropdownBreakpoint = dropdown.getAttribute('fc-dropdown-breakpoint-off')
if(dropdownBreakpoint === null)
return false
const breakpointWidth = breakpoints[`${dropdownBreakpoint}`]
if(breakpointWidth === undefined)
return false
if(window.innerWidth <= breakpointWidth)
return true
return false
}
function closeDropdown(dropdown) {
const dropdownToggle = dropdown.querySelector('.w-dropdown-toggle')
if(dropdownToggle.classList.contains('w--open'))
{
dropdownToggle.dispatchEvent(new Event('mousedown'))
dropdownToggle.dispatchEvent(new Event('mouseup'))
dropdownToggle.dispatchEvent(new MouseEvent('click'))
}
}
function openDropdown(dropdown) {
const dropdownToggle = dropdown.querySelector('.w-dropdown-toggle')
if(!dropdownToggle.classList.contains('w--open'))
{
dropdownToggle.dispatchEvent(new Event('mousedown'))
dropdownToggle.dispatchEvent(new Event('mouseup'))
dropdownToggle.dispatchEvent(new MouseEvent('click'))
}
}
</script>
к name подключаем поле из коллекции