let ball = document.querySelector("#ball");
ball
- html элемент со своими top,left,width,height
let field = document.querySelector("#field");
...
let fieldCoords = field.getBoundingClientRect();
field
- html элемент со своими top,left,width,height
fieldCoords
- размер этого элемента и его позицию относительно viewport (часть страницы, показанная на экране, и которую мы видим).let ballCoords = {
top: event.clientY - fieldCoords.top - field.clientTop - ball.clientHeight/2,
left: event.clientX - fieldCoords.left - field.clientLeft - ball.clientWidth/2
}
ballCoords
- переменная с координатами top
и left
. Рассмотрим как они подсчитываются на примере ballCoords.top
ballCoords.top =
event.clientY
- расстояние от верхней границы экрана до курсора без учета прокрутки- fieldCoords.top
- минус отстояние поля от верхней границы экрана- field.clientTop
- минус Толщина верхней границы поля в пикселях- ball.clientHeight/2
- минус пол высоты мячаif(ballCoords.top + ball.clientHeight > field.clientHeight) {
ballCoords.top = field.clientHeight - ball.clientHeight;
ballCoords.top + ball.clientHeight
это относительная координата нижней границы мяча (относительная потому что отсчитана от верхней границы поля)ballCoords.top = field.clientHeight - ball.clientHeight;
ball.style.top = ballCoords.top + "px";
Бот на node-telegram-bot-api.
Нужно изменить сообщение, отправленное телеграм ботом. Как это реализовать?
так, а где происходит инициализация ошибки?
// вызов с ошибкой
setTimeout(func.bind(null, new Error('error'), 'hello world', (err, data) => {
if(err){
console.log('ошибка', err);
}else{
console.log('данные', data);
}
}), 2000);
// вызов без ошибки
setTimeout(func.bind(null, null, 'hello world', (err, data) => {
if(err){
console.log('ошибка', err);
}else{
console.log('данные', data);
}
}), 4000);
Зачем это мне: Чтоб имея диалог бота с чатом получить id диалога. А зная токен бота я уже могу писать через бота сообщения в чат моим софтом.
Зарегистрировал в Botfather тг-бота получил токен бота
const oncreate = once((err, socket) => {
if (err) {
process.nextTick(() => this.emit('error', err));
} else {
this.onSocket(socket);
}
});
try {
const newSocket = optsWithoutSignal.createConnection(optsWithoutSignal,
oncreate);
if (newSocket) {
oncreate(null, newSocket);
}
} catch (err) {
oncreate(err);
}
getConnections(callback) {
this._request({
cmd: 'NODE_SOCKET_GET_COUNT',
key: this.key
}, 'NODE_SOCKET_COUNT', false, (err, msg) => {
if (err) return callback(err);
callback(null, msg.count);
});
}
function func(err, data, cb) {
if(!err) {
cb(null, data);
} else {
cb(err, data);
}
}
// вызов с ошибкой
setTimeout(func.bind(null, new Error('error'), 'hello world', (err, data) => {
if(err){
console.log('ошибка', err);
}else{
console.log('данные', data);
}
}), 2000);
// вызов без ошибки
setTimeout(func.bind(null, null, 'hello world', (err, data) => {
if(err){
console.log('ошибка', err);
}else{
console.log('данные', data);
}
}), 4000);
так я хочу в элс выводить ошибку, если она у меня выпадет.
setTimeout(func.bind(null, new Error('error') ...
if(!err)...
Ну и что-то я не вижу в ответах альтернатив codewars-у. Так что ваш коммент всего лишь не конструктивная придирка)