• Как на jQuery свернуть развернуть div?

    AngReload
    @AngReload
    Кратко о себе
    $(document).ready(function(){
        $(".slideT").hide();
        $(".pointer").click(function () {
          // можно и иначе выбрать все другие блоки
          // вот так $(".pointer").not(this)
          $(this).siblings()
            .children()
            .slideUp("slow");
          $(this)
          	.children()
            .slideDown("slow");
        });
    })
    Ответ написан
  • Откуда появляется горизонтальный скрол на этой странице?

    AngReload
    @AngReload
    Кратко о себе
    .row {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -ms-flex-wrap: wrap;
        flex-wrap: wrap;
        margin-right: -15px;
        margin-left: -15px;
        margin-top: 20px;
    }

    У вас тут написано
    margin-right: -15px;
    margin-right: -15px;
    грубо говоря, залезть на 15 пикселей за правую и левую границу экрана
    Ответ написан
    Комментировать
  • Нужно вывести числа в заданном диапазоне. Почему выводит результат не при всех задаваемых значениях?

    AngReload
    @AngReload
    Кратко о себе
    Это конечно говнокод, но ошибка только одна:
    var n = prompt('введите начальное число диапозона', '0');
    var k = prompt('введите конечное число диапозона', '0' );

    prompt возвращает строки а не числа, поэтому нужно конвертировать в число, например так:
    var n = parseInt(prompt('введите начальное число диапозона', '0'), 10);
    var k = parseInt(prompt('введите конечное число диапозона', '0' ), 10);

    через Number или parseInt.

    Вообще, полезно знать разницу при сравнении чисел и строк:
    9 < 10 // true
    '9' < '10' // false
    Во втором случае получается «ложь», потому что строки сравниваются по кодам символов, начиная с первого символа, те '9' < '1'. Смотрим коды символов:
    '9'.charCodeAt(0) // 57
    '1'.charCodeAt(0) // 49
    57 больше 49, поэтому сравнение заканчивается, выдавая значение false.
    Поэтому условие цикла n <= k работает не как ожидается.
    Ответ написан
    1 комментарий
  • Как распечатать маленький чек при помощи чекового принтера из браузера?

    AngReload
    @AngReload
    Кратко о себе
    Есть CSS правила для печати, можно попробовать добавить такой код для печатаемой страницы:
    @page {
      size: 3in 3in;
      margin: 0;
    }
    @media print {
      html, body {
        width: 3in;
        height: 3in;
      }
    }

    https://developer.mozilla.org/en-US/docs/Web/CSS/@...
    Ответ написан
    1 комментарий
  • Как сделать checkbox равным 0 или 1?

    AngReload
    @AngReload
    Кратко о себе
    У checkbox отмечен он или нет определяется по наличию атрибута checked, а value не меняется.
    https://developer.mozilla.org/en-US/docs/Web/HTML/...

    function getData(obj_form){
        var hData = {};
        $('input, textarea, select', obj_form).each(function(){
            if(this.name && this.name!=='') {
                var data;
                if (this.type === 'checkbox') {
                    console.log('ветка true');
                    data = this.checked;
                } else {
                    console.log('ветка false');
                    data = this.value;
                }
                hData[this.name] = data;
                console.log('hData[' +this.name + '] = ' + hData[this.name]);
            }
        });
        return hData;
    };

    PS: В value надо писать что он означает, а не отмечен он или нет.
    Ответ написан
  • Почему множественный fetch-запрос возвращает Promise вместо объектов?

    AngReload
    @AngReload
    Кратко о себе
    Потому что then всегда возвращает promise.
    Даже если ты внутри функции resolve напишешь return 42, это then вернёт Promise(42).
    fetch(url).then(function(response) {
      return 42;
    })

    Это работает так по двум причинам.
    Первая, чтобы можно было без проблем писать .then().then().then(). Ведь если какой-нибудь then вернёт число посреди такой цепочки, то произойдёт ошибка. Ведь у чисел нет метода then, верно?
    (42).then() // => TypeError: 42.then is not a function
    Вторая причина, это то что промисы не выполняются сразу. В этом и смысл, верно? Мы создаём цепочку отложенных вычислений по принципу Если произошло это, тогда сделать То, а потом Вот это и т.д. Методу then просто нечего возвращать на тот момент, когда ты его запускаешь. Его запуск только создаёт план действий.

    Поэтому, когда ты запускаешь console.log(data), в массиве data лежат промисы. И они даже ещё не начали выполняться на этот момент. Ни одна из функций resolve или reject еще не была запущена.

    Код можно поправить так:
    'use strict';
    
    let urls = [
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/ETHUSD',
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/LTCUSD',
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'
    ];
    
    let data = urls.map((item, index) => {
      return fetch(item).then(function(response) {
        return response.json();
      }).then(function(data) {
        console.log(data);
      }).catch( alert );
    })
    
    console.log(data);
    Сначала в консоли появится массив промисов, который ты уже видел. А уже через секунду три объекта, которых ты ждал.

    Чтобы получить три объекта сразу, в массиве, нужно прибегнуть к либо async / await, либо как писали в других ответах Promise.all. Promise.all(array).then(resolve, reject) ждет выполнения всех промисов в array, и только тогда вызывает resolve или reject для массива ответов или ошибок.

    'use strict';
    
    let urls = [
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/ETHUSD',
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/LTCUSD',
      'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'
    ];
    let array = urls.map((item, index) => {
      return fetch(item).then(function(response) {
        return response.json();
      }).catch( alert );
    });
    
    Promise.all(array).then(console.log);
    Ответ написан
    1 комментарий
  • Как сделать так чтобы блок не сжимался при font-size: 0?

    AngReload
    @AngReload
    Кратко о себе
    Тот код, что в вашем вопросе — работает как ожидается. Но возможно у вас есть ещё какие-то стили для этого блока, следует посмотреть в Инспекторе в Инструментах разработчика.

    А так нельзя?
    <a href="#" class="ig"><img src="URL" alt="Мы в инстаграм"></a>
    Ответ написан
    Комментировать
  • Как сделать такое подчеркивание текста?

    AngReload
    @AngReload
    Кратко о себе
    Помести текст в тег span и примени к нему что-то типа border-bottom: 4px solid red;
    https://jsfiddle.net/256hwzej/7/
    Ответ написан
    Комментировать
  • Как правильно написать код при клике на объект водвигается блок слева?

    AngReload
    @AngReload
    Кратко о себе
    Правильно. Трудно ошибиться в трёх строках.
    Ответ написан
  • Как сделать такие табы?

    AngReload
    @AngReload
    Кратко о себе
    Это обычные кнопки, которые лежат в родителе с display: flex; раньше такое делали с помощью display: inline-block;
    Под кнопками 10 таблиц, при нажатии на любую кнопку всем таблицам применяется display: none, а для таблицы равной href кнопки display: block;

    Вот onclick кнопки (его можно увидеть в инструментах разработчика):
    function(event) {
      event.preventDefault();
      $('.device_model_btns a').removeClass('active');
      $(this).addClass('active');
    
      var id = $(this).attr('href');
      $('.phone_tabs_item').hide();
      $('.phone_tabs_item').removeClass('phone_tabs_item_active');
    
      $(id).addClass('phone_tabs_item_active');
      $(id).show();
    
      resetMoreContentBtn();
    }
    Ответ написан
    Комментировать
  • Как обойти anti-adblock на qaru.site?

    AngReload
    @AngReload
    Кратко о себе
    Зайди в настройки uBlock Origin > Мои фильтры, и добавь строчку:
    http://qaru.site/*.js
    Потом нажми «Сохранить изменения».

    Какой-то он подозрительный этот сайт, он только переводит stackoverflow?
    Ответ написан
    6 комментариев
  • Почему новый созданный объект конструктора не меняет локальные переменные конструктора?

    AngReload
    @AngReload
    Кратко о себе
    Вы наверное забыли, что при каждом запуске функции User всё что внутри её будет запущено заново, в том числе создание пустых переменных firstname и surname. Чтобы создать замыкание код должен быть такой:

    код убрал под спойлер
    var firstname, surname;
    function User() {
      this.setFirstName = function(name) {
        if (name.replace) {
        	firstname = name;
        }
        else {
        	throw new Error('Введите имя');
        }
      }
      this.setSurname = function(name) {
        if (name.search) {
        	surname = name;
        }
        else {
        	throw new Error('Введите фамилию');
        }
      }
      this.getFullName = function() {
      	return firstname + ' ' + surname;
      }
      
    }
    
    var user = new User();
    user.setFirstName("Петя");
    user.setSurname("Иванов");
    
    alert( user.getFullName() ); // Петя Иванов
    var user2 = new User();
    user2.setFirstName('Фёдор');
    user2.setSurname("Марков");
    alert( user2.getFullName() );
    alert( user.getFullName() ); // Уже не Петя Иванов

    То что раньше было это тоже замыкание, но каждый новый объект замыкал свои версии firstname и surname.
    Ответ написан
  • Почему не получается переписать оригинальное свойство импортируемого css?

    AngReload
    @AngReload
    Кратко о себе
    По нормальному должны быть такие селекторы:
    .subtitle, который задаёт отступ-снизу для всех subtitle и
    .subtitle:last-child который отменяет отступ-снизу для последнего subtitle

    У вас селекторы почему-то были организованы наоборот, так что есть правила:
    .subtitle — который работает только для последнего элемента, так как после него есть селектор отменяеющий его для всех остальных
    .subtitle:not(:last-child) да-да этот, поищите его ниже в CSS, если его изменить, то изменятся и все .subtitle. Но это правило применяется и к другим элементам, так что лучше создать отдельное правило после него.
    Ответ написан
    Комментировать
  • Как пофиксить добавление ширины от скроллбара на Windows?

    AngReload
    @AngReload
    Кратко о себе
    В приципе, можно узнать размер прокрутки.
    https://codepen.io/parziphal/pen/qrZGLw
    Но я не знаю что вы хотите делать с этим дальше? Можно с помощью js классы навешивать или ещё что-нибудь что вам нужно.
    Ответ написан
    Комментировать
  • Как модернизировать скролл на IE11?

    AngReload
    @AngReload
    Кратко о себе
    Попробуй остановить видео когда текущая прокрутка не равна нулю. Оно всё равно фоновое, и даром не нужно его воспроизведение, когда оно на половину обрезано.
    Ответ написан
    Комментировать
  • Как убрать отступы в блоке в Опере и Хроме?

    AngReload
    @AngReload
    Кратко о себе
    У меня ваша картинка не показывается, так как вы сделали кривую ссылку на яндекс диск.
    Но подозреваю, что это может быть артефакт интерполяции изображения. Попробуйте добавить для картинки стиль image-rendering: pixelated;. Если границы исчезнут, то проблема в этом.
    Ответ написан
  • Как сделать видео перематываемым?

    AngReload
    @AngReload
    Кратко о себе
    Перекодировать в ffmpeg с параметром g, если в видео 24fps то ставь -g 24 чтобы перемотка работала с точностью до секунды.
    ffmpeg -i tutor.mp4 -g 24 tutorWithG48.mp4
    Ответ написан
    Комментировать
  • Последствия добавления backface-visibility: hidden для *?

    AngReload
    @AngReload
    Кратко о себе
    Здесь https://caniuse.com/#search=backface-visibility есть несколько known issues, но ничего смертельного на мой взгляд.
    Ответ написан
    Комментировать
  • ShowingTooltip = null; зачем?

    AngReload
    @AngReload
    Кратко о себе
    С 14 по 26 устанавливаются координаты где будет расположена подсказка. Считается исходя из позиции вьюпорта, элемента на который наведена мышь, и размеров посказки. И если координата заходит за верхнюю или левую границу вьюпорта (те отрицательные получились), то кординаты ставятся такие что бы подсказка была в его границах.
    На 27-й сохраняется элемент подсказки в переменную «showingTooltip», чтобы потом её можно было скрыть при отведении мыши.

    Потом идёт событие отведения мыши. Если «showingTooltip» не пуст, тогда подсказка удаляется со страницы и переменная «showingTooltip» устанавливается в «null». Если не очистить переменную «showingTooltip», то при движении мыши по станице мы будем постоянно пытаться удалить уже удалённую ранее со страницы подсказку.
    Ответ написан
  • Как избежать двойного цикла и оптимизировать?

    AngReload
    @AngReload
    Кратко о себе
    function func(arr, parametres) {
    	for (let i = 0; i < parametres.length; i++) {
    		const param = parametres[i];
    
    		let condition;
    		if (param.type === 'type1') {
    			condition = true;
    		} else if (param.type === 'type2') {
    			condition = false;
    		} else {
    			// может ли быть 'type3' или что-то такое, тогда пропускаем этот шаг
    			continue;
    		}
    
    		// судя по телу второго цикла
    		// при каждой итерации founded переписывается
    		// значит в результате происходит сравнение только последней пары
    		// и цикл можно убрать
    		if (
    			(
    				arr[arr.length - 1].property1 === param.property1 &&
    				arr[arr.length - 1].property2 === param.property2
    			) === condition
    		) {
    			return false;
    		}
    
    		// но скорее всего это была бага, и цикл нужно переписать так
    		for (let j = 0; j < arr.length; j++) {
    			if (
    				(
    					arr[j].property1 === param.property1 &&
    					arr[j].property2 === param.property2
    				) === condition
    			) {
    				// при первом же совпадении функция будет завершена
    				// без бесполезных проходов по оставшимся элементам
    				return false;
    			}
    		}
    	}
    	return true;
    };
    Ответ написан
    1 комментарий