Skip to content

Instantly share code, notes, and snippets.

View b-aleksei's full-sized avatar

Алексей b-aleksei

View GitHub Profile
@b-aleksei
b-aleksei / cookie.js
Created October 25, 2021 10:07
cookie
@b-aleksei
b-aleksei / tab.js
Last active September 19, 2021 18:22
tab-panel-ally
export const changeTab = (currentTab) => {
const emptyEl = document.createElement('div');
const tabContainer = currentTab.closest('.tab-container');
if (!tabContainer) return;
const activeTab = tabContainer.querySelector('.tab-title[aria-selected="true"]') || emptyEl;
activeTab.removeAttribute('aria-selected');
activeTab.setAttribute('tabindex', '-1');
currentTab.setAttribute('aria-selected', 'true');
currentTab.removeAttribute('tabindex');
(function() {
const fileLoaderContainers = document.querySelectorAll('.file-loader');
const renderFileLoader = function(fileLoaderContainer) {
const wrapper = fileLoaderContainer.querySelector('.file-loader__wrapper');
const btnAdd = fileLoaderContainer.querySelector('.js-fileloader-open');
if (!wrapper || !btnAdd) {
return;
}
const inputFileLoader = wrapper.querySelector('.file-loader__item');
@b-aleksei
b-aleksei / tooltip.js
Created September 2, 2021 17:53
ToolTip
export const tooltipToggle = (btn) => {
const content = btn.nextElementSibling;
if (!content) return;
content.classList.toggle('active');
if (content.classList.contains('active')) {
const closeContent = ({target}) => {
if (!content.contains(target) ) {
content.classList.remove('active');
document.removeEventListener('click', closeContent);
}
@b-aleksei
b-aleksei / RotateNumbers.js
Created September 2, 2021 06:54
вращение счетчика
import ResizeObserver from 'resize-observer-polyfill';
export class RotateNumber {
constructor(selector) {
this.$el = typeof selector === 'string' ? document.querySelector(selector) : selector;
if (!(this.$el instanceof HTMLElement)) {
return;
}
this.digits = this.$el.querySelectorAll('.payout__container');
this.maxNumberValue = 9;
@b-aleksei
b-aleksei / accordion.js
Last active August 27, 2021 07:08
accordion-classic
const accordionToggle = (selector) => {
const accordion = document.querySelector(selector);
if (!accordion) return;
let previousContent = null;
let previousTitle = null;
accordion.addEventListener('click', (e) => {
const accTitle = e.target.closest('.accordion__title');
if (accTitle) {
const accContent = accTitle.nextElementSibling;
if (previousContent) {
@b-aleksei
b-aleksei / range-native.js
Last active August 7, 2021 18:36
range-native
export default class Range {
constructor(selector) {
this.$el = this.getHtmlElement(selector);
if (!this.$el) return;
this.min = +this.$el.dataset.min ?? 0;
this.max = +this.$el.dataset.max ?? 100;
this.dom = this.mapDOM(this.$el);
this.eventNames = {
pointerdown: 'pointerdown',
pointermove: 'pointermove',
@b-aleksei
b-aleksei / accordion.js
Created July 5, 2021 12:28
accordion-flip
const container = document.querySelector('.accordion-container');
const titles = document.querySelectorAll('.accordion-title');
titles.forEach(t => {
t.addEventListener('click', ({currentTarget}) => {
const contentHeight = currentTarget.nextElementSibling.offsetHeight;
container.style.setProperty('--content-height', `${-contentHeight}px`);
const accordion = currentTarget.parentElement;
if (accordion.classList.contains('accordion-active')) {
accordion.classList.remove('accordion-active', 'move-sibling-accordion');
return
@b-aleksei
b-aleksei / checkFormatImg.js
Created June 18, 2021 09:41
check-Format-Img
async function supportsImgType(type) {
const img = document.createElement('img');
await document.createElement('picture').append(
Object.assign(document.createElement('source'), {
srcset: 'data:,x', // валидный урл не дергающий сеть
type,
}),
img
);
return !!img.currentSrc; // если браузер умеет, заполнит значение currentSrc
export default class Dbrange {
constructor(selector) {
this.$el = this.getHtmlElement(selector);
if (!this.$el) return;
this.dom = this.mapDOM(this.$el);
this.eventNames = {
pointerdown: 'pointerdown',
pointermove: 'pointermove',
pointerup: 'pointerup',
};