• В чём причина ошибки mousemove при повторном mousedown?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Без конкретного примера на jsfiddle сложно понять, что не так, но главное подозрение падает на установку mousemove внутри другого обработчика. На первый взгляд, всё должно работать, но по симптомам проблема именно здесь. Да и в принципе это ненужное усложнение, спокойно можно обойтись без него.

    По поводу замечаний по коду - у вас довольно много ошибок начинающего: весь код одной лапшой, полно магических цифр, названия переменных неинформативные, никакой инкапсуляции. Например, я так и не смог понять, каким элементом карусели является brick - это карточка, кнопка листания, что-то ещё?

    В первом приближении должно быть что-то похожее на это:
    spoiler
    var carousel = (function() {
      var isInsideCarousel = false,
        brickPos = 0,
        magicNumbers = {
          first: 8, // Количество элементов в ряду?
          second: 3, // Количество рядов?
          third: 5, // Какой-то padding родительского контейнера?
          fourth: 790, // Ширина контейнера?
          fifth: 0, // Левая граница страницы?
        },
        $brick, offset, target;
    
      function turnOn(e) {
        console.log("DOWN");
        isInsideCarousel = true;
        offset = e.pageX;
        target = $(this).parent().siblings(".product-carousel-container");
      }
    
      function turnOff() {
        console.log("UP");
        isInsideCarousel = false;
        brickPos = parseInt($(brick).css("left"), 10);
      }
    
      function scroll(e) {
        var relX, move;
    
        if (!isInsideCarousel) {
          return;
        }
    
        relX = e.pageX - offset + brickPos;
        move = -relX * magicNumbers.first / magicNumbers.second;
    
        console.log(relX);
    
        $(brick).css("left", relX);
        $(target).css("left", move);
    
        if (relX <= magicNumbers.fifth) {
          $(brick).css("left", magicNumbers.fifth);
          $(target).css("left", magicNumbers.fifth);
        } else if (relX >= magicNumbers.fourth - magicNumbers.third) {
          $(brick).css("left", magicNumbers.fourth);
          $(target).css("left", -1 * magicNumbers.fourth * magicNumbers.first / magicNumbers.second);
        }
      }
    
      return function($el) {
        $brick = $el;
        $el.mousedown(turnOn);
        $(document).mousemove(scroll);
        $(document).mouseup(turnOff);
      }
    }());
    
    $(document).ready(function() {
      carousel($(".brick"));
    });


    Бонусным уровнем было бы обернуть это всё в jquery-плагин, но я не стал этого делать.
    Ответ написан
    1 комментарий
  • Как получить результат подготовленного запроса?

    svd71
    @svd71
    Проблема в том, что результат это массив строк. То и индекс должен быть типа $row[0]['tname'].
    Функция print-r($row) выведет вам все в браузер для отладки.
    Ответ написан
    3 комментария
  • Как правильно получить ID свежесозданной строки в MySQL?

    bingo347
    @bingo347
    Crazy on performance...
    MySQL умеет возвращать lastInsertID
    в PDO для этого есть метод: fi2.php.net/manual/en/pdo.lastinsertid.php
    Ответ написан
    Комментировать
  • Как правильно получить ID свежесозданной строки в MySQL?

    @nelson
    Канонический способ получения последнего использованного автоинкрементного id - это выполнение sql-запроса LAST_INSERT_ID()
    Кроме того, аналогичные и более удобные функции есть в любой библиотеке для работы с базой данных.
    Если вы используете стандартное расширение PDO, то nl3.php.net/manual/en/pdo.lastinsertid.php
    Ответ написан
    1 комментарий