расстояние от боков карточки до боков экрана может отличаться
50vw - 50%
. В этом случае нужно еще учесть ширину скроллбара, которую придется определять в js.// табы
const tabsBtn = [...document.querySelectorAll(".widget-chat__tabs__btn")];
if (xDiff > 0) {
/* left swipe */
const currIdx = tabsBtn.findIndex((el) => el.classList.contains("active"));
const prevIdx = currIdx - 1;
if (prevIdx > -1) {
tabsBtn[prevIdx].click();
}
} else {
/* right swipe */
const currIdx = tabsBtn.findIndex((el) => el.classList.contains("active"));
const nextIdx = currIdx + 1;
if (nextIdx < tabsBtn.length) {
tabsBtn[nextIdx].click();
}
}
image.naturalHeight
. Плюс ко всему document.querySelector
выбирает первый попавшийся элемент, а не тот который бы создан последнимrenderer.render(scene, camera);
function splitSum(sum, splits) {
const nums = [sum];
while (nums.length !== splits) {
const { val, idx } = nums.reduce(
(a, v, i) => (v > a.val ? { idx: i, val: v } : a),
{ idx: -1, val: -Infinity }
);
/* // OR
const idx = Math.floor(nums.length * Math.random());
const val = nums[idx]; */
let a, b;
do {
a = Math.round(val * Math.random());
b = val - a;
} while (a === b || nums.includes(a) || nums.includes(b));
nums.splice(idx, 1, a, b);
}
return nums;
}
location.hash = hash
прокручивает страницу до якоря. Используй History API чтобы поменять урл в адресной строке. DracoEncoderModule
подключается глобально скриптом<script src="js/libs/draco/draco_encoder.js"></script>
<script src="js/libs/draco/draco_wasm_wrapper.js"></script>