function testIntersection(elem1, elem2, cb){
// получаем координаты первого и второго элемента
let box1 = elem1.getBoundingClientRect();
let box2 = elem2.getBoundingClientRect();
let isIntersection = true;
// если нижняя грань первого элемента выше чем верхняя грань второго - НЕПЕРЕСЕКАЮТСЯ
if ( box1.bottom < box2.top ){ isIntersection=false; }
// если верхняя грань первого элемента ниже чем нижняя грань второго - НЕПЕРЕСЕКАЮТСЯ
if ( box1.top > box2.bottom ){ isIntersection=false; }
// если правая грань первого элемента левее чем левая грань второго - НЕПЕРЕСЕКАЮТСЯ
if ( box1.right < box2.left ){ isIntersection=false; }
// если левая грань первого элемента правее чем правая грань второго - НЕПЕРЕСЕКАЮТСЯ
if ( box1.left > box2.right ){ isIntersection=false; }
// если всеже пересекаются, выполняем колбэк функцию
if( isIntersection ){
cb();
}
}
req.app.emit('broadcast', data)
?ws.on('connection', (socket) => {
console.log('connected')
})
app.on('broadcast', (data = {}) => {
ws.clients.forEach(client => client.send(JSON.stringify(data)))
})
/**
* функция добавляет код скрипта на страницу предварительно удаляя из него указанные куски текста,
* @param {string} url полные URL добавляемого скрипта
* @param {string} replaces массив со строками, которые будут удалены (заменены на пустоту)
*/
function addScript( url , replaces=[]) {
// получаем текст добавляемого на страницу скрипта
fetch(url)
.then(response=>{
return response.text();
})
.then(text=>{
// готовим регулярку для замены всех вхождени из массива replaces
const restr = "("+replaces.join("|")+")";
const regex = new RegExp(restr, "g");
// заменяем в тексте скрипта все вхождения из массива replaces
const code = text.replace(regex,"");
// получаем указатель на head страницы
let head = document.getElementsByTagName( 'head' )[ 0 ];
// создаем новый элемент script
let script = document.createElement( 'script' );
script.charset="utf-8";
script.type = 'text/javascript';
//script.src = url;
script.innerHTML = code;
// добавляем измененный скрипт на страницу
head.appendChild( script );
});
}
// Используем заготовку
// например у нас есть сторонний скрипт, который нам надо добавить на страницу => https://external.domain/js/needed.js
// но он запускаясь подгружает не нужные нам скрипты https://external.domain/js/unnecessary.js и https://external.domain/js/advertising.js
// тогда делаем так
addScript(
"https://external.domain/js/needed.js",
[
"unnecessary.js",
"advertising.js"
]
);
// ну и на последок. Вы должны понимать что данное решение не панацея и его легко обойти
// например "вредные" скрипты могут иметь случайносгенерированное имя
// так же хочу предупредить, что данное решение будет сыпать ошибки в консоль, так как после удаления
// из кода загружаемого скрипта строк с именами файлов вредных скриптов, код который их загружает
// не сможет этого сделать.
// так же данный свособ может привести к частичной или полной неработоспособности полезного скрипта
// например если полезный скрипт использует функции из подгружаемых вредных скриптов
// или если в полезном скрипте есть переменные или функции с именами, аналогичными удаляемым скриптам
// и т.д. и т.п.
import React, { useState } from 'react';
import './styles.css';
function debounce(fn, ms, ...args) {
let timer;
return (value) => {
timer = setTimeout(() => {
// ваш вариант вообще забывал о том что в fn вы пытаетесь передать value
fn.apply(this, [value,...args]);
// удалять обработчик таймаута вообще не надо, но если это всетаки делать, то наверное уже после того как
clearTimeout(timer);
timer = null;
}, ms);
};
}
export default function App() {
const [value, setValue] = useState('');
const handleChange = e => {
const {value} = e.target;
delayHandler(value);
};
const delayHandler = debounce(value=>{
setValue(value);
alert(value);
}, 2000);
return (
<div className="App">
<p>Current value: {value}</p>
<form>
<input onChange={handleChange} />
</form>
</div>
);
}
function debounce(fn, ms) {
return (...args) => {
setTimeout(() => {
fn.apply(this, args);
}, ms);
};
}
var el = document.querySelector("div.card__owerlay-wrapper a.card-do__btn.print__btn");
90 => 3.061616997868383e-16 --- 5
180 => 3.061616997868383e-16 --- 5
240 => 3.061616997868383e-16 --- 5
360 => 3.061616997868383e-16 --- 5
Можно ли обойти проблему? Конечно, наиболее надёжный способ — это округлить результат используя метод toFixed(n):
let sum = 0.1 + 0.2; alert( sum.toFixed(2) ); // 0.30
// ваши даты из бд
var start = "1970-01-01";
var end = "2018-03-10";
// парсим их с помощью moment-а
var a = moment(start, "YYYY-MM-DD");
var b = moment(end, "YYYY-MM-DD");
// получаем количество дней между датами
var days = a.diff(b, 'days') ;
// пихаем days куда вам там надо
...
// ваши даты из бд
var start = "1970-01-01";
var end = "2018-03-10";
// парсим их с помощью нативного JS
var a = Date.parse(start);
var b = Date.parse(end);
// получаем количество дней между датами
var days = Math.floor(Math.abs(b-a)/(1000*60*60*24)) ;
// пихаем days куда вам там надо
...