Ответы пользователя по тегу JavaScript
  • Как перевернуть фото при загрузке с iphone?

    @MrTimon
    На сервере считываете имидж, проверяете его ориентацию, оборачиваете в ту которую нужно и сохраняете уже в правильном положении.
    $image = imagecreatefromstring(file_get_contents($_FILES['user_image']['tmp_name']));
            $exif = exif_read_data($_FILES['user_image']['tmp_name']);
            if(!empty($exif['Orientation'])) {
                switch($exif['Orientation']) {
                    case 8:
                        $image = imagerotate($image,90,0);
                        break;
                    case 3:
                        $image = imagerotate($image,180,0);
                        break;
                    case 6:
                        $image = imagerotate($image,-90,0);
                        break;
                }
            }
    
            $file = 'filename.jpeg';
            $uploadfile = $uploaddir . $file;
    
            imagejpeg($image,$uploadfile,90);
    //
            imagedestroy($image);


    Этот код перевернет имидж в верной ориентации. Только для роботы кода должно быть установлено exif расширение для пхп (в php.ini нужно раскоментовать строку extension=php_exif.dll, ну и нужно, конечно же, иметь этот самый php_exif.dll в папке с расширениями )
    Ответ написан
    Комментировать
  • Можно ли строить чертежи с помощью javascript-библиотек?

    @MrTimon
    Думаю Вам нужно смотреть в сторону canvas-а. Вот здесь статейка, может поможет. Также думаю есть уже написаны библиотеки для рисования на канвасе с помощью js.

    ну или есть еще возможность рисовать с помощью svg. Здесь нашел какие-то примеры с и-нета
    Ответ написан
    Комментировать
  • Как добавить новый блок после существуещего?

    @MrTimon
    var div = document.createElement('div');
    div.className = 'cl';


    Эти строчки нужно переместить в тело функции , что вызывается на клик. (в самом начале функции нужно поставить)
    Ответ написан
  • Не правильно отображается состояние чекбоксов, как исправить?

    @MrTimon
    Во-первых, я бы не рекомендовал использовать глобальную переменную `i`, так как вы используете далее `i` в цикле и т д. Это как бы не проблема, но немножко путает, ну и потом может вызвать проблемы .

    А если по сути, то у вас проблема в функции updateTasks. Вот как должна она выглядеть :

    function updateTasks() {
        $('#todo-list').find('li').remove();
        $(tasks).each(function(i,t) {
        		
            $('#todo-list').append('<li class="'+ t.status +'">\
                <div class="todo-task">\
                <input class="toggle" type="checkbox" data-id="'+ i +'" '+ (t.status == 'completed' ? ' checked ' : '' ) +'><label class="text">'+ t.title +'</label>\
                <button class="destroy" data-id="'+ i +'"></button>\
                </div>\
                </li>');
        });
       
        tasksCount();
    }


    остальное все в порядке. Должно заработать.
    Ответ написан
    1 комментарий
  • Как сделать попап из отдельной html-страницы? без айфрейма?

    @MrTimon
    Есть куча плагинов для попапа. Погуглить непробовал

    Как по мне fancyBox норм, только он достаточно большой, зато у него куча возможностей. Все зависит от функционала который должен быть.
    Ответ написан
  • Не могу понять простой js. Пните в нужном направлении?

    @MrTimon
    Во-первых indexOf возвращает число - позицию первого вхождение (тоесть может быть и 0 если первый элемент) или -1 ели ничего не найдет, тоесть неверно его результат сравнивать с true. Во-вторых вы верно говорите что нужно обратиться к элементу массива, а вы ищете во всем массиве. Ну и еще вы вводите буквы через запятую то здесь не понятно как должно быть вывести все слова в которых есть хотя бы одна из введенный букв или слова в которых должны быть все введенные буквы. Если считать что вводиться только одна буква и переделать ваш пример то получается что-то такое

    var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
            var userLetter = prompt("Укажите букву");
    
            for (var i = 0; i < libraryLetter.length; i++) {            
                if(libraryLetter[i].indexOf(userLetter) > -1){
                        ????
                   }else {
                           console.log("Совпадений не найдено");
                            }
            };


    Можно так же заюзать filter ф-цию . Получиться так

    var libraryLetter = ["book", "car", "bank", "near", "between", "map", "dog"];
            var userLetter = prompt("Укажите букву");
    
            var filteredwords =  libraryLetter.filter(function(value) {
                      return value.indexOf(userLetter) > -1
            }) 
          
                if(filteredwords.length ){
                        ????
                   }else {
                           console.log("Совпадений не найдено");
                  };
    Ответ написан
    Комментировать
  • Как написать правильно и кратко RegExp?

    @MrTimon
    ([^\(]+)+(\(.+\))?\s(.+)
    Ответ написан
    Комментировать
  • Добавить класс во время изменеие?

    @MrTimon
    Измени код на следующий
    $('.list_product input').change(function(){
      $(this).closest('.list_product').addClass('fixed_blok');
    });
    Ответ написан
    Комментировать
  • Вывод данных на лету?

    @MrTimon
    Ну во-первых инпуты которые вы указали на самом деле чекбоксы ) Тогда получаеться как то так

    $("#double-fields1").on("change", function(){
       $("#double-fields2").prop('checked',$(this).prop('checked'));
       $("#double-fields3").prop('checked',$(this).prop('checked'));
    });


    Ну а ели вам все же нужно в текстовые поля вводить то как то так

    $("#double-fields1").on("keyup", function(){
       $("#double-fields2").val($(this).val());
       $("#double-fields3").val($(this).val());
    });
    Ответ написан
    Комментировать
  • Действие во время анимации jQuery?

    @MrTimon
    Ввможете задейсвовать css анимацию по увеличению/уменьшению размеров скорость которой будет соответствовать стокорости полной js анимации. Здесь Пример анимации. обратите внимание на строку

    transition: width 1s linear, height 1s linear;

    там в секундах указано скорость анимации. А в js Я просто изменяю класс. Тоесть вам не нужно делать это в цикле. Вы просто изменяете классы для элементов и запускаете анимацию карусели. Должно все получиться в лучшем виде.

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

    $( "li" ).animate({
      opacity: .5,
      height: "50%"
    }, {
      step: function( now, fx ) {
        var data = fx.elem.id + " " + fx.prop + ": " + now;
        $( "body" ).append( "<div>" + data + "</div>" );
      }
    });


    Тоесть Вы можете прописать в здесь все изменения, которые должны происходить с Вашем блоком. Ну там сдвиг влево/вправо ну и увлечения/уменьшения некоторых элементов. И в конце анимации поменять классы.
    Ответ написан
  • Как исправить скрипт добавления/удаления класса по клику?

    @MrTimon
    Потому что на момент когда Вы объявляете скрипт у вас нету классов .toggle поэтому ничего на них и не вешается.
    Предлагаю эту строчку

    $('#list .toggle').on('change', function() {

    заменить на следующею

    $('#list').on('change', '.toggle', function() {

    P.S. Так же заметил лишний дефис в этой строчке
    $('#-list li').removeClass('checked');
    Ответ написан
    3 комментария
  • Взять value из input, сравнить и вывести?

    @MrTimon
    Учитывая Ваш коммент
    Допустим при вводе слова "service" и нажатии ентер без перезагрузки появляется блок service


    Есть 2 варианта.
    1. Вивести все блоки сразу же но только скрытыми (display: none;) и тогда выводить только тот который нужно. JS будет примерно такой

    $(document).ready(function() {
        var $input = $('#input_id'); // здесь ID инпута нужно прописать вместо input_id
        
    
        $input.keypress(function(e) {
            if(e.which == 13) {
                var block = $(this).val();
                $('.block').hide();  // прячем все блоки. З,Ы. все блоки должны иметь класс .block
    
                if ( $('.block#'+block).length > 0) {
                    $('.block#'+block).show();
                } else {
                    $('.block#error').show(); // показываем блок з id='error';
                }
    
            }
        });
    });


    Получиться Что когда ввы введете в инпут айдишку какого-то блока то он и покажется а если такого блока не будет, то покажет блок с ошибкой (который тоже должен быть).

    ну или если вам нужно сравнивать с списком возможных блоков то можно объявить массив с айдишками этих блоков.

    var  existing_blocks = ['block1', 'block2', ..., 'blockN'];


    и потом последнее условие изменить на следующее

    if ( existing_blocks.indexOf(block)  != -1) {
         $('.block#'+block).show();
    } else {
         $('.block#error').show(); // показываем блок з id='error';
    }


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

    @MrTimon
    Ну во-первых не нужно в ф-цию sendGet ставить обработчик $(".btn-selector").click. Выберете или одно или другое. Я бы советовал убрать ынлайн ф-цию sendGet. А скрипт перепесать следующим образом

    $(document).ready(function() {
    
            $(".btn-selector").click(function () {
                    var imgsrc = $(this).attr('value');
    
                    $.ajax({
                        type: 'get',
                        url: 'ajax.php',
                        data: {
                            'data_item': imgsrc 
                        },
                        dataType : 'html',
                        success: function (data) {
                            $('#result').html(data);
                        }
                    });
                });
    
    });


    тоесть имидж нужно выберать с атрибутов батона ну или с нижестоящего имиджа. Если я правильно понял Ваше условие
    Ответ написан
    1 комментарий
  • Как исправить скрипт, чтобы заработало в Firefox?

    @MrTimon
    Вы должны event передавать первым параметром в ф-цию move (а Вы как мне кажется передаете туда 0). В хроме работает так как e заменяется на window.event, тогда как в FF такого значение нету (Пример который вы предоставили в ссылке тоже выдает ошибку TypeError: e is undefined при наведении).

    Посмотрел код примера. Предлагаю так ф-цию over тоже добавить параметр e и потом его передавать в ф-цию move. как-то так:
    function over(e,tip)	//функция при наведении
    	{  
    		//обрабатываем массив с данными
    		data_color = '';
    		data = maparray[tip-1];
    		data = data.split(';');
    		name = 	data[0]
    		square = data[1]
    		desc = data[2]
    		//добавляем тултип
    		$('').appendTo('body').html(name+' '+square+'кв.м.'+desc);
    		move(e,0,0);
    	}


    потом удалить все инлайн вызовы ф-ции over и дописать следующий код в документ реди:

    $(document).ready(function(){
    		$('area').mouseover(function(e) {
                          over(e,$(this).index()+1);
                    });
    	});


    не проверял но должно работать нормально.
    Ответ написан
    1 комментарий
  • Срабатывание события при drag&drop?

    @MrTimon
    Используй ивент change: см. документацию

    В твоем случае как то так:

    <!-- DRAG & DROP -->
    <script type="text/javascript">
        $(function() {
            $('#tasksCart_01, #tasksCart_03').sortable({
                    connectWith: '#tasksCart_01, #tasksCart_03',
                    change: function( event, ui ) {
                         $('#елемент-на-который-нужно-нажать').trigger('click');
                    }
            });
        });
    </script>
    Ответ написан
    Комментировать
  • Как обновить reCapcha в форме, после ее отправки?

    @MrTimon
    В js у тебя должен быть объект grecaptcha. И после отправки аякса пишешь

    grecaptcha.reset();
    Ответ написан
    Комментировать
  • Почему выбывает ошибку в js?

    @MrTimon
    Когда удаляешь все элементы то список пустой соответственно у тебя нету элемента myList.lastElementChild. Допиши проверку на существование lastElementChild. Тоисть измени строку на следующую

    el.innerHTML = 'item' +  (myList.lastElementChild && myList.lastElementChild.textContent ? (parseNum(myList.lastElementChild.textContent) + 1 ) : 1);
    Ответ написан
    Комментировать
  • Почему firefox не качает, а открывает файл?

    @MrTimon
    ну или Вы можете прикрутить к линку атрибут download - htmlbook.ru/html/a/download . Это не очень кросбравзерный вариант но в большинстве случаев этого хватает .
    Ответ написан
    Комментировать
  • Как добавить в option атрибут selected?

    @MrTimon
    Нужно написать небольшую ф-цию чтобы выбирать параметры урла:
    function getQueryParameter(param) {
        var url = decodeURIComponent(window.location.search.substring(1));
        var urlVars = url.split('&');
        var parameterName;
    
        for (var i = 0; i < urlVars.length; i++) {
            parameterName = urlVars[i].split('=');
    
            if (parameterName[0] === param) {
                return parameterName[1] === undefined ? true : parameterName[1];
            }
        }
    };


    ну а потом уже устанавливаете значение в селекте

    $('select').val(getQueryParameter('style'));
    Ответ написан
    Комментировать
  • Как оптимизировать (сократить) вот это?

    @MrTimon
    хорошо бы было и верску увидеть, но можно и обойтись. Если делать именно так как у Вас написано то можно сделать так:
    $('.sub-menu_lvl1 li a').mouseenter(function() {
        var classes = ['one','two','three','four','five']
         
        $('.sub-menu_lvl2').removeClass('info-visible');
        $('.sub-menu_lvl2.' + classes[ $(this).closest('li').index()]).addClass('info-visible');
      });


    Но это не самый лучший вариант. Лучше для линка на который вы наводите прописать id или data атрибут такой же как класс который нужно сделать видимым (one, two, three, four, five ) . Ну и при наведении выбирать это значение.
    тоисть ссилка должна быть <a href="#" data-visibleclass="one">...</a> и тогда:
    $('.sub-menu_lvl1 li a').mouseenter(function() { 
        $('.sub-menu_lvl2').removeClass('info-visible');
        $('.sub-menu_lvl2.' + $(this).data('visibleclass')).addClass('info-visible');
      });
    Ответ написан
    1 комментарий