Добавлены attachments - clickOutside и intersection
This commit is contained in:
15
src/lib/attachments/clickOutside.svelte.js
Normal file
15
src/lib/attachments/clickOutside.svelte.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export default (callback) => {
|
||||||
|
return (node) => {
|
||||||
|
const onclick = (event) => {
|
||||||
|
if (node && !node.contains(event.target) && !event.defaultPrevented && typeof callback === 'function') {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('click', onclick, true);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('click', onclick, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/lib/attachments/intersection.svelte.js
Normal file
14
src/lib/attachments/intersection.svelte.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export default (callback) => {
|
||||||
|
return (node) => {
|
||||||
|
$effect(() => {
|
||||||
|
const observer = new IntersectionObserver((entries) => {
|
||||||
|
if (entries?.[0].isIntersecting) {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
observer.observe(node)
|
||||||
|
return () => observer.disconnect()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
export { default as clickOutside } from './attachments/clickOutside.svelte'
|
||||||
|
export { default as intersection } from './attachments/intersection.svelte'
|
||||||
|
|
||||||
export { default as Image } from './components/Image.svelte'
|
export { default as Image } from './components/Image.svelte'
|
||||||
export { default as Picture } from './components/Picture.svelte'
|
export { default as Picture } from './components/Picture.svelte'
|
||||||
export { default as YandexMetrika } from './components/YandexMetrika.svelte'
|
export { default as YandexMetrika } from './components/YandexMetrika.svelte'
|
||||||
Reference in New Issue
Block a user