canvas
. Картинки должны быть с того же домена, что и страница.function getPixel(url, x, y) {
var img = new Image();
img.src = url;
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
return context.getImageData(x, y, 1, 1).data;
}
PIXI
есть свойство loader
. Его можно получить так: PIXI.loader
loader
, в свою очередь, есть метод add()
. Вызывается как Loader.add()
Это, если бы мы результат в промежуточную переменную записали: var Loader = PIXI.loader; Loader.add()
load()
.PIXI.loader.add("images/anyImage.png").load(setup)
Для читаемости разнесены по строкам. removeEventListener('click', mainFunc);
mainFunc
и прочие вызывать только после отработки асинхронного кода.addEventListener()
на этой кнопке, чтобы все последующие обработчики складывать в массив. И вызывать их из массива только после своего и mainFunc
.min
до max
,min
до max - 1
.0 1 2 3 4 5
^ выпало "2"
для второго остались:
0 1 3 4 5
выбираем случайное из
0 1 2 3 4
и если получилось >= 2
то добавляем 1
0 1 2 3 4
^ выпало "4"
добавили 1 получилось 5
Итого, 2 и 5.function twoRandom(min, max) {
if (min > max - 1) throw "min should be less or equal max - 1";
a = Math.floor(Math.random() * (max - min + 1)) + min;
b = Math.floor(Math.random() * (max - min)) + min;
if (b >= a) b = b + 1;
return [a, b];
}
for (let n = 11; n <= 31; n = n + 2) {
if (isPrime(n)) {
console.log(n);
}
}
function isPrime(n) {
for (let i = 3, root = Math.sqrt(n); i <= root; i++) {
if (n % i === 0) return false;
}
return true;
}
const validClasses = ['className', 'jobsWrapper'];
return [...el.classList].some(className => validClasses.includes(className));
const data = arr.reduce((acc, c) => {
c.properties.groups.forEach((group) => {
if (! acc.hasOwnProperty(group.id)) acc[group.id] = [];
acc[group.id].push(group["well-being"]);
});
return acc;
}, {});
/*
{
0: [0.9, 0.8, 0.8],
1: [0.5, 0.3, 0.1],
2: [0.4, 0.8, 0.6]
} */
const avg = {};
for (let id in data) {
avg[id] = data[id].reduce((acc, c) => acc + c) / data[id].length;
}
console.log(avg); /*
{
0: 0.8333333333333334,
1: 0.3,
2: 0.6000000000000001 // 0.1 + 0.2 !== 0.3
} */
innerHTML
, а узлы, DOM Nodes, рекурсивно. Из них рассматривать только текстовые, и менять в них. // bad
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// bad
$('#items').
find('.selected').
highlight().
end().
find('.open').
updateCount();
// good
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// bad
const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.classed('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led').data(data);
Код работает, но не знаю костыльный ли он
// вместо
if(currentElem[0] == 1 || currentElem[0] == 2 || currentElem[0] == 6) {
// можно
if ([1, 2, 5].includes( +currentElem[0])) {
// вместо
for(let i = 0; i < arr.length; i++) {
let currentElem = arr[i];
// можно
arr.forEach((currentElem) => {
// что-то делать с переменной currentElem
})
// получаем 1-ю цифру делением на 10 снова и снова
// работает только для положительных чисел
const first = (x) => x < 10 ? x : first(Math.floor(x / 10));
const valid = [1, 2, 5]; // допустимые первые цифры
const result = [10, 20, 30, 50, 235, 3000]
.filter((item) => valid.includes(first(item)));
console.log(result); // [10, 20, 50, 235]
const datePicker = document.createElement("div");
datePicker.className = 'datePickerInline';
// тут накладываем на элемент всякие события
const str = '<div><span>Вставляем</span><div> <div class="replace_me"></div> </div><div><p>в уже готовые html элементы в виде строки</p></div></div>';
let el = document.getElementById('element');
el.innerHTML = str;
el.querySelector('div.replace_me').replaceWith(datePicker);
el
, в который всё это вставляется. f12()
только ищет и возвращает позицию (или –1). let d12 = [6, 62, 60, 70, 1, 33];
function f12(arr, search) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === search) {
return i;
}
}
return -1;
}
function show() {
const divOut = document.querySelector('.out-12');
const inpuValue = +document.querySelector('.i-12').value;
divOut.innerHTML = f12(d12, inpuValue);
}
document.querySelector('.b-12').onclick = show;
кол-во просмотров стрима в реальном времени, лайков поста или проверка онлайна пользователя на чем лучше реализоватьWebSocket лучше: сообщений много.