Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как лучше опрашивать состояния элементов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Т.е. на сервере что-то происходит, о чём надо оповестить клиент, и вы делаете это, опрашивая раз в секунду сервер «есть чё?», причём в несколько параллельных потоков – по каждому айтему.

    Сделайте «конец» api, с которого можно забирать сразу несколько готовых задач. Когда задача на сервере «пропадает», пихайтё её item_id в некий одноразовый массив для выдачи в клиент.

    Так хоть в один всего поток раз в секунду будете опрашивать сервер, и забирать массив с id завершенных.
    Ответ написан
    Комментировать
  • Как реализовать распознавание фотографий на js и нейронных сетях?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Распозначание цифр делается на основе обучения сети немаленьким набором картинок MNIST где каждой нарисованной цифре соответствует её правильное значение.

    На JavaScript возьмите, например, библиотеку ConvnetJS.

    Готовую, обученную на распознавание компьютерной техники по картинкам сеть хотите готовенькую? Вряд ли найдёте.

    Напишите и обучите сами, спарсив какой-нибудь магазин компьютерной техники – там легко сопоставить картинку и соответствующий ей класс устройства. Но набор только продающихся моделей, наверное, маловат. Можно ещё добавить поисковую выдачу Яндекса/Google по картинкам.
    Ответ написан
    Комментировать
  • Не могу понять как правильно задать условие?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    С прицелом на более сложные кейсы предложу генерировать моменты, переключающие расписание, непременно в будущем. Т.е. создаём объект нужной даты-времени из текущего. И накидываем неделю по необходимости.

    Все ключевые моменты в ближайшем будущем. Смотрим, который из них ближе всего. Это определяет то, какой сейчас интервал активен:
    // Два момента, переключающих расписание
    var s18 = getNextMoment( 0, 18); // Sunday 18:00
    var f12 = getNextMoment( 5, 12); // Friday 12:00
    
    function getNextMoment( day, hour) {
      var D = new Date(), dayDiff;
      D.setHours(hour);
      D.setMinutes(0);
      D.setSeconds(0);
      dayDiff = day - D.getDay();
      D.setDate( D.getDate() + dayDiff + ( dayDiff < 0 ? 7 : 0));
      return D;
    }
    
    if( f12 < s18) { // сначала наступит Пятница 12.00
    
      // Режим ожидания
      
    } else { // сначала наступит Воскресенье 18
      
      if( new Date().getHours() < 6) {
        // Ночной
      } else {
        // Дневной
      }
      
    }
    Ответ написан
    2 комментария
  • Какие есть блиотеки для работы с blockchain?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Посмотрите видео (на англ., 39 минут) про построение системы голосования на блокчейн. Научно-популярно разжёванное, с нуля до построения и развёртывания работающего приложения.
    Ответ написан
    Комментировать
  • Как написать условие на проверку пустой переменной JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В данном случае, когда id интервала содержит ненулевое целое число, можно так:
    switchInterval && clearInterval(switchInterval);

    или в более читаемом виде
    if( switchInterval) {
      clearInterval(switchInterval);
    }


    Этот способ не подходит, если валидным значением является ноль или false или пустая строка.
    Ответ написан
  • Почему код JavaScript не работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробуйте так:
    var i, test;
    for( i = 0; i < checkbox.length; i++) {
      if (checkbox[i].checked) {
        test = document.getElementById('slide' + (i+1));
        test  &&  test.click();
      }
    }
    Ответ написан
    Комментировать
  • Как сделать отсчёт времени до определённой даты?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут две задачи:
    1. из строки «часы:минуты:секунды» получить объект Date с ближайшим в будущем моментом с этим часом, минутой и секундой;
    2. запустить таймер обратного отсчёта до этой Даты.


    Сделать объект Date на сейчас и его копию. Копии установить час, минуту и секунду из строки. Если получился объект в прошлом, накинуть один дополнительный день.

    Обратный отсчёт – запускать одну и ту же функцию по несколько раз в секунду для плавности отображения времени, т.к. таймеры в JavaScript не точные и если запускать 1 раз в секунду, секунды могут «икать».

    В функции берем текущее время, сравниваем с заданным. Показываем остающиеся часы-минуты-секунды. И вызываем себя же через сколько-то миллисекунд. Если уже наступило целевое время, выводим другой текст и более не вызываем себя.

    Код
    /**
     * Из строки времени в формате HH:MM:SS
     * делает объект Date
     * с ближайшим, после текущего момента, таким временем.
     * @param String строка времени
     * @return Date Object
     */
    function parseTime(s) {
      var now = new Date(), D = new Date(now.getTime()), HMS = s.split(':');
    
      if( HMS.length !== 3) throw({message:"неверный формат времени"});
      
      HMS = HMS.map(function(t){return parseInt(t)}); // перевести строки в целые
      
      D.setHours(HMS[0]);
      D.setMinutes(HMS[1]);
      D.setSeconds(HMS[2]);
      
      if( D < now) D.setDate( D.getDate() + 1);
      
      return D;
    }
    
    /**
     * добивает число нулями до двух позиций.
     *  3 -> 03
     * 13 -> 13
     */
    function pad(n, len, char) {
      var s = n.toString(10);
      char = char || '0';
      len = len || 2;
      if( s.length >= len) return s;
      return (Array(1+len).join(char) + n).slice(-len);
    }
    
    /**
     * Выводит в заданный DOM-элемент время, 
     * оставшееся до даты-времени в объекте toDate
     */
    function countdown( toDate, el) {
      var diff = toDate.getTime() - new Date().getTime()
        , H
        , M
        , S = Math.floor(diff/1000)
      ;
      
      if( S <= 0) { //  время прошло
        el.innerText = "--:--:-- Ой, всё!";
        return;
      }
      
      H = Math.floor(S/3600);
      S = S % 3600;
      M = Math.floor(S/60);
      S = S % 60;
      
      el.innerText = '' +pad(H) +':' +pad(M) +':' +pad(S);
      
      setTimeout( countdown.bind(this, toDate, el), 111);
    }
    
    countdown(
      parseTime('15:00:00'),
      document.querySelector('h1.question__title')
    );

    Если приведённый код выполнить в консоли/скретчпаде на этой странице, вместо заголовка вопроса появится таймер отсчёта.

    Fiddle
    Ответ написан
    Комментировать
  • Как вычислить сумму значений из последних 5 записей?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    JavaScript там не нужен, судя по вашему коду. Обойдёмся одним PHP:
    <?php
    $id	= 2743;	// ID заданной рубрики
    $n	= 5;	// количество выводимых записей
    $recent = new WP_Query("cat=$id&showposts=$n");
    $sum = 0;
    
    while($recent->have_posts()) {
    
    	$recent->the_post();
    
    	if( get_field("result") === 'Win') {
    		$value = get_field('koff') * get_field('summa');
    		$sum += $value;
    		$out = sprintf( '%01.2f', $value); // 1.23
    	} elseif( get_field("result") === 'open') {
    		$out = "&hellip;"; // троеточие
    	} else {
    		$out = '0.00';
    	}
    	
    	echo $out . ' рублей.';
    }
    
    printf( "<p>Сумма: %01.2f рублей.</p>", $sum);
    Ответ написан
    4 комментария
  • Почему some отрабатывает, а every нет?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    every()каждый») – более строгий, чем some()некоторые»)

    every() вернёт true только, когда по всем элементам выполнено условие.
    some() вернёт true, как только хотя бы в одном встретится выполнение условия.

    В вашем примере можно переписать без some() старым добрым indexOf():
    const availableVersions = versions.filter(
      version => !!~item.version_ids.indexOf( version.id )
    );

    Fiddle

    !!~ из любого значения, кроме -1, вернёт true, а для -1 вернёт false.
    Ответ написан
    Комментировать
  • Какой порог вхождения в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Чтобы начать, у вас уже всё есть: в любом браузере можно прямо сейчас написать простое выражение на JS типа 5 + 6 и получить результат. Например, в FireFox это можно сделать в Консоли разработчика (Ctrl + Shift + K) или в интерактивном блокноте (Scratchpad Shift + F4). Т.е. устанавливать на комп ничего не нужно.

    Что делать дальше, чтобы было интересно – слишком индивидуально, чтобы предлагать. Меня, например, увлекает генерируемая графика. Написал формулу, правила, и генерируется красивый узор. Для этого стоит погуглить про canvas, или разобраться с Processing JS.

    Можно делать простейшие, для начала совсем примитивные HTML5 игры, которые выкладывать в ВК или Телеграм, чтобы другие могли их пробовать. Делать что-то востребованное другими – тоже отличная мотивация развиваться.
    Ответ написан
    1 комментарий
  • Как опубликовать запись на стене в iframe vk с телефона?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Disclaimer я не сталкивался пока с публикацией на стену из мобильного клиента, поэтому не знаю решения, работающего наверняка.

    не пробовали JavaScript SDK использовать? В документации про окно подтверждения, откуда ваша цитата, этот вариант выглядит предпочтительнее. См. Вызов методов API ВК в JS SDK.
    Ответ написан
  • Как вывести javascript в зависимости от условий?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    См. задание строк heredoc синтаксом, форматированный вывод printf() и его спецификации формата в sprintf()
    <?php
    if( the_field('result') === 'Win') {
        $tmpl = <<<EOFSCRIPT
    <script type="text/javascript">
    var kof1 = %f, kof2 = %f, total_Sum;
    total_Sum = kof1 * kof2;
    document.write(total_Sum);
    </script>
    EOFSCRIPT;
      printf( $tmpl, the_field('koff'), the_field('summa')); 
    } else {
      echo '0';
    }
    ?>
    Ответ написан
  • Как написать данное условие на JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    if( !~document.body.className.indexOf('home_body')) {
      // do something for non-homepage
    }
    Ответ написан
  • JS, как сделать поиск в строке и выполнить условие?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Брать каждое из проверочных слов и по очереди искать в данном тексте.

    text.indexOf(keyword) вернёт -1 если ключевое слово не найдено в тексте. Или его позицию от 0 и больше, если нашлось. См. indexOf()

    Выражение !!~x вернёт true для x == 0 или больше, и false только для x == -1.

    Примерно так:
    function areYouThere(str) {
      var i, j, found = 0, filters = [
        "яблоко, лимон, груша".split(', '),
        "вишня, арбуз, клубника".split(', '),
        "каштан, тарелка, борщ".split(', ')
      ];
      
      for( i = 0; i < filters.length; i++) {
        for( j = 0; j < filters[i].length; j++) {
          if( !!~str.indexOf(filters[i][j])) found = found | 1 << i;
        }
      }
      
      return found;
    }
    
    var mask = areYouThere("арбуз вам не яблоко!");
    if( mask & 1 << 0) alert (1);
    if( mask & 1 << 1) alert (2);
    if( mask & 1 << 2) alert (3);
    Ответ написан
    2 комментария
  • Как выбрать элемент по значению?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Перебирать все HTML узлы, и сравнивать их значения с образцом..
    Ответ написан
    Комментировать
  • Максимальное число в массиве, как правильнее?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Конечно же, второй вариант: list[0].
    Доказательство: найти максимум в массиве отрицательных чисел.

    А быстрее встроенным методом Math.max():
    Math.max.apply(null, list)
    Ответ написан
    2 комментария
  • Как с помощью js удалить часть текста из атрибута href?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Например, есть ссылка
    <a href="http://site.ru/en/post" id="myLink">click me</a>

    Тогда путём нехитрой замены подстроки в свойстве href получится желаемое:
    var a = document.getElementById("myLink");
    a.href = a.href.replace( '/en/', '/');

    (и не нужны тут регулярные выражения)
    Ответ написан
    3 комментария
  • Версия OS и браузера?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    См. HTTP заголовок User-Agent.

    Например, готовая реализация: faisalman/ua-parser-js. Её демо.
    Ответ написан
    Комментировать
  • Какие сервисы для продажи js скриптов, вы знаете?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    github, за «звёзды» : )
    Ответ написан
    Комментировать
  • Как сделать, чтобы при наведении мышкой на элемент, его цвет менялся случайным образом каждый раз?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Функция, меняющая цвет, всего в две строчки:
    var randomColor = function(e){
      var r = () => Math.round(Math.random()*255);
      e.target.style.color = "rgb(" + [r(),r(),r()].join(',') + ")";
    }


    С jQuery её повесить, например, на заголовок вопроса тут:
    $('H1.question__title').on('mouseover', randomColor);

    Или на чистом JavaScript:
    document.querySelector('h1.question__title')
      .addEventListener('mouseover', randomColor);
    Ответ написан
    Комментировать