Страницы

Поиск по вопросам

Показаны сообщения с ярлыком jquery-ui. Показать все сообщения
Показаны сообщения с ярлыком jquery-ui. Показать все сообщения

среда, 15 апреля 2020 г.

Проблема с JQuery

#jquery #jquery_ui

                    
Пользуюсь библиотекой jqery-ui, и при разработке появилась проблема того, что на
один draggable-элемент могут реагировать сразу 2 droppable-элемента. Мне нужно чтобы
мог реагировать только один. При этом у draggable-элемента задан tolerance: 'touch'.
Схематично проблему я попытался изобразить на картинке:

    


Ответы

Ответ 1



В общем, ждать ответ на свой комментарий у меня нет сегодня времени, поэтому я наугад смодулировал ситуацию. Посмотрите рабочий пример и если поможет, то плиззз )) Draggable
  • Droppable
  • Droppable
  • Droppable
  • Droppable
  • Droppable
- #drop_list { width: 145px; } #drop_list li, #drag_el { padding: 15px 35px; border: 1px solid #900; margin: 2px; } #drag_el { float: right; background: #FF0; } .red { background: #F00; color: #FFF; } .green { background: #0F0; color: #FFF; } - $('#drag_el').draggable({cursor: 'move'}); $('#drop_list li').droppable({ hoverClass: 'green', drop: function() { $(this).addClass('red'); $('#drop_list li').not(this).removeClass('red'); } });

понедельник, 9 марта 2020 г.

Uncaught TypeError: jQuery(…).datepicker is not a function

#javascript #jquery #ruby_on_rails #jquery_ui


В проекте написанном на ruby on rails установлна библиотека для jquery ui. 

На следующем скрипте через консоль гугл хром выдает ошибку 


  Uncaught TypeError: jQuery(...).datepicker is not a function





Полазив в интернете на форумах и поговорив с программистами, все говорят, что это
из конфликта скриптов. Где то два раза запускается один и тот же скрипт или конфликт имен. 

У меня вопрос следующий. Как и с помощью каких инструментов можно проверить где и
что именно конфликтует? Проект очень большой, толком понять где этот скрипт конфликтует
очень сложно. Заранее спасибо за ответ.   
    


Ответы

Ответ 1



Проблема была связана с конфликтом нескольких скриптов jquery. Через консоль хрома показала ошибку плагина. Удалил дублирующий и все стало на свои места.

пятница, 14 февраля 2020 г.

Заказ билетов с использованием jquery ui autocomplete

#php #jquery #json #jquery_ui


Есть такая формочка заказ билетов, где нужно указать откуда летишь и куда: 



$('.js-autocomplete').on('focus', function(){
        window.autocomplite_items = false
        $(this).autocomplete({ 
            source:'https://ufsa.com.ua/ufsa/autocomplete.php', 
            minLength: 2, 
            autoFocus : true,
            select: function( event, ui ) {
                console.log('select');
                window.autocomplite_items = true
                $(this).next().val(ui.item.id);
            },
            close: function(event, ui) {
                if(!window.autocomplite_items && this.value.length >= 2) {
                    var alias = this
                    $.get('https://ufsa.com.ua/ufsa/autocomplete.php?b&term=' + this.value
, {} , function(tpl) {
                        try {
                            var obj = eval('(' + tpl + ')');
                            $(alias).next().val(obj[0].id)
                        } catch(e) {
                            console.debug(e)
                        }
                    })
                }
            }
        });
    });







  

Использую jquery ui autocomplete и json файл с др. сайта. Задача, при фокусе на поле должны высвечиваться варианты аэропортов - город + код аэропорта (например как тут - *не реклама, исключительно как пример). Вопрос: Как реализовать автокомплит городов с аэропортами, возможно, есть международными и общедоступный jsonp файл с подобными данными? Что для php нужно? И как реализовать несовпадение откуда и куда (при вводе города откуда, чтобы в куда уже он не высвечивался)? P.S: И если в дальнейшем планируется интеграция в Wordpress, возможно, есть готовые плагины\виджеты для реализации подобного?


Ответы

Ответ 1



возможно, есть международными и общедоступный jsonp файл с подобными данными? Есть сервисы, которые предоставляют API поиска по аэропортам (например, https://developer.flightstats.com/api-docs/airports/v1), но по очевидным причинам, они платные и при определённой нагрузке это может стать не выгодно. Беглый поиск по GitHub выдаёт два репозитория с аэропортами, самый популярный обновлялся в 2015 году, другой — совсем недавно, хоть и создан в 2014, что добавляет трастовости: https://github.com/mwgg/Airports Данные можно получать скриптом (самое простое — git pull-ить репозиторий), а затем конвертировать результаты в какую-либо бд для более быстрого поиска. Задача, при фокусе на поле должны высвечиваться варианты аэропортов - город + код аэропорта (например как тут - *не реклама, исключительно как пример). В вашем примере данные начинают возвращаться только при вводе двух символов, просто выпадайка с аэропортами будет изначально добавляться к весу страницы (например, json в репозитории, который я привёл выше, весит 8.9 мегабайт) Что для php нужно? PHP пригодится для того, чтобы не возвращать во фронтенд список всех аэропортов, а получать только те, которые удовлетворяют поисковому запросу. Сама реализация сильно зависит от нагрузки и инструментов (например, фреймворка), которые вы выберете. В целом, это же справедливо для инструментов на фронтенде, т. к., например, jquery ui тянет за собой много зависимостей (js, css), которые могут оказаться лишними. И как реализовать несовпадение откуда и куда (при вводе города откуда, чтобы в куда уже он не высвечивался)? Для этого достаточно при отправке запроса из второго select на бекенд передавать код уже найденного в первом селекте аэропорта. При определённом допущении, код для получения списка аэропортов может быть одинаковым и в него будут передаваться текущие значения обоих select. Я постарался ответить на ваши вопросы, но в целом, вопросы довольно комплексные и ответ может перейти в дискуссию о поставщике данных, сохранении результатов, кешировании выборе компонентов и технологий для фронтенда и бэкенда. Если потребуются какие-то уточнения — пишите, я обновлю ответ.

четверг, 13 февраля 2020 г.

Как отследить события с динамического контента?

#jquery #jquery_ui #ajax #javascript


Имеем автокомплит по названию предприятия
$("#firms").autocomplete({
    source: "ajax_firms.cgi",
    select: function (event, ui) {
        $.ajax({
            type: "GET",
            url: "ajax_staff.cgi",
            data: "firms=" + (ui.item.id),
            success: function (html) {
                $("#value").html(html);
            }
        });
    }
});

При успешном выборе нами генерируется динамическая форма с именами сотрудников


Как отследить событие при смене сотрудника? Пробовал .change, но оно динамические
ловить не хочет.    


Ответы

Ответ 1



Как сказано, селект генерируется динамически. Это означает, что обработчик на него нужно вешать только после того, как он добавлен на страницу или с помощью live. Либо выводить по умолчанию пустой скрытый селект, а после выбора фирмы заполнять его и отображать на странице

Ответ 2



спасибо. так вышло еще оптимальней $("#persons").on("change","#person", function(event){

Ответ 3



пробовал .change, но оно динамические ловить не хочет. Вы ошибаетесь.

Поднять scroll bar

#javascript #html #jquery #css #jquery_ui


Как можно по нажатию кнопки поднять скролл в самое начало блока?
скролл сделан через overflow
    


Ответы

Ответ 1



var toTop = document.getElementById('toTop'); toTop.onclick = function(){ window.scrollTo(0, 0); }

Ответ 2



Крутите вниз!
Можно также без кнопок, просто по нажатию на ссылку:
Крутите вниз!
Наверх!

воскресенье, 12 января 2020 г.

Как связать инпуты с ползунком range slider для вывода результата?

#javascript #html #jquery #jquery_ui


Можно ли как-то связать значения инпутов from и to range slider при их редактировании
(ввод значений в поля) с функцией getValues(values), вычисляющей разницу to - from? 

Пример на codepen


На данный момент происходит вычисление только при перетаскивании ползунков.
Меняю ползунки слайдера - вычисляется total, ввожу в поля input свои значения - не
вычисляется total )




'use strict';

$(document).ready(function() {
  console.log('Hello, world!');

  // ---------------------------------- Range slider jq ui
  $('.filter__slider-element').each(function() {
    var $this = $(this),
      container = $this.closest('.filter__slider'),
      min = parseInt($this.data('min')),
      max = parseInt($this.data('max')),
      from = container.find('.filter__slider-input-from'),
      to = container.find('.filter__slider-input-to');

    from.change(function() {
      $('.filter__slider-element').slider('values', 0, from.val());
    });

    to.change(function() {
      $('.filter__slider-element').slider('values', 1, to.val());
    });

    $this.slider({
      range: true,
      min: min,
      max: max,
      values: [min, max],
      slide: function(event, ui) { // При каждом перемещении
        var values = $(this).slider('option', 'values');
        from.val(ui.values[0]);
        to.val(ui.values[1]);
        getValues(ui.values);
      },
      // change: function(event, ui) {                    // В конце перетаскивания    
      //   getValues(ui.values);
      // },
      create: function() { // При создании виджета
        var values = $(this).slider('option', 'values');
        from.val(values[0]);
        to.val(values[1]);

        //getValues();
      },
      stop: function(event, ui) { // При завершении перетаскивания
        getValues(ui.values);
      }
    });
  });

  function getValues(values) {
    var total = 0;
    $('.filter__slider-element').each(function() {
      var values = $(this).slider("option", "values");
      var dif = values[1] - values[0];
      total += dif;
    });

    $("#totals").text(total);
  }
});
.form {
  padding: 3rem 0;
}




from
to

from
to

Total: 0


Ответы

Ответ 1



При установке свойства values происходит событие change, поэтому его стоит раскомментировать и все заработает. 'use strict'; $(document).ready(function() { console.log('Hello, world!'); // ---------------------------------- Range slider jq ui $('.filter__slider-element').each(function() { var $this = $(this), container = $this.closest('.filter__slider'), min = parseInt($this.data('min')), max = parseInt($this.data('max')), from = container.find('.filter__slider-input-from'), to = container.find('.filter__slider-input-to'); from.change(function() { $this.slider('values', 0, from.val()); }); to.change(function() { $this.slider('values', 1, to.val()); }); $this.slider({ range: true, min: min, max: max, values: [min, max], slide: function(event, ui) { // При каждом перемещении var values = $(this).slider('option', 'values'); from.val(ui.values[0]); to.val(ui.values[1]); getValues(ui.values); }, change: function(event, ui) { // В конце перетаскивания console.log('change'); getValues(ui.values); }, create: function() { // При создании виджета var values = $(this).slider('option', 'values'); from.val(values[0]); to.val(values[1]); //getValues(); }, stop: function(event, ui) { // При завершении перетаскивания getValues(ui.values); } }); }); function getValues(values) { var total = 0; $('.filter__slider-element').each(function() { var values = $(this).slider("option", "values"); var dif = values[1] - values[0]; total += dif; }); $("#totals").text(total); } }); .form { padding: 3rem 0; }
from
to

from
to

Total: 0


понедельник, 30 декабря 2019 г.

Как сделать тепловой след от курсора

#javascript #jquery #css #jquery_ui #css_animation


Не могу понять, как сделать такой же тепловой след от курсора
тепловой след появляется на верхнем блоке
    


Ответы

Ответ 1



Немного если сократить код и нагрузку на браузер и выбрасывать за собой мусор, получится вот так) $('html').on('mousemove', function(e){ var bubble = $('
'); bubble.css({'left': e.clientX-50, 'top': e.clientY-50}); $('body').append(bubble); setInterval(function(){bubble.remove()}, 1000) }); .bubble{ position: absolute; width: 100px; height: 100px; border-radius: 50%; background-color: coral; box-shadow: 0 0 0 0 coral; animation: leave 1s ease forwards; } @keyframes leave{ from{ width: 100px; height: 100px; } to{ width: 0px; height: 0px; } }

Ответ 2



С положением думаю разберешься как до курсора подвинуть) И нужно сетинтервалом удалять их а то будут апендиться бесконечно) ДОМ тоже чистить надо) Надеюсь идея понятна) $('html').on('mousemove', function(e){ var x = e.clientX; var y = e.clientY; var id = new Date(); var sec = id.getSeconds(); var min = id.getMinutes(); var ms = id.getMilliseconds(); var all = min+''+sec+''+ms; $('body').append('
'); $('#'+all+'').css({'left': x, 'top': y}); }); .bubble{ position: absolute; width: 100px; height: 100px; border-radius: 50%; background-color: coral; box-shadow: 0 0 0 0 coral; animation: leave 1s ease forwards; } @keyframes leave{ from{ width: 100px; height: 100px; } to{ width: 0px; height: 0px; } }

воскресенье, 22 декабря 2019 г.

При помощи jQuery UI Datepicker сделать несколько календарей на странице таким образом, чтобы к каждому можно было применить свой стиль

#javascript #html #jquery_ui #календарь #datepicker


Как на одной Html-странице сделать несколько независимых календарей jQuery UI Datepicker,
чтобы у каждого был свой класс (чтобы к каждому применить свои стили)?
    


Ответы

Ответ 1



Достаточно просто применить к инпутам класс и повесить datepicker на него $(function() { $( ".datepicker" ).datepicker({ dateFormat: "yyyy-mm-dd" }); });

Ответ 2



Чтобы изменить оформление для каждого календаря отдельно, потребуется задавать класс внутри функции beforeShow. При этом сначала придется удалять все возможные "свои" классы, иначе после открытия всех календарей будут добавлены все классы. $(function() { $(".datepicker").datepicker({ beforeShow: function(input, inst) { inst.dpDiv .removeClass('custom1 custom2') .addClass($(input).data('dp-class')); } }); }); #ui-datepicker-div.custom1 { background: #ff8; } #ui-datepicker-div.custom2 { background: #f8f; }

Реализация равновесия(аналог весов с песком )

#javascript #html #jquery #css3 #jquery_ui


И так у нас есть терезы , к ним мы будем вешать блоки ( реализовал через draggable)
!Как сделать так чтоб , когда вешаем на терезы блок они опускались в низ, когда добавляли
вес с другой стороны , тогда они приводились в равновесия!



    $(".state").draggable();
    $('.obj_block1').draggable();
    $(".top").draggable();
   
.state {
  background-image: url(../img/Object1.png);
  background-repeat: no-repeat;
  height: 401px;
  width: 300px;
  cursor: pointer;
}

.top {
  background-image: url(93bus.png);
  background-repeat: no-repeat;
  height: 40px;
  width: 400px;
  cursor: pointer;
}

.obj_block1 {
  background-image: url(../img/block1.png);
  background-repeat: no-repeat;
  height: 70px;
  width: 70px;
  cursor: pointer;
}




Ответы

Ответ 1



$.fn.animateRotate = function(angleFrom, angleTo, duration, easing, complete) { var args = $.speed(duration, easing, complete); return this.each(function(i, e) { args.complete = $.proxy(args.complete, e); args.step = function(now) { $.style(e, 'transform', 'rotate(' + now + 'deg)'); }; $({ deg: angleFrom }).animate({ deg: angleTo }, args); }); }; $.fn.animateCircularPath = function(angleFrom, angleTo, radius, offsetX, offsetY, duration, easing, complete) { var args = $.speed(duration, easing, complete); return this.each(function(i, e) { args.complete = $.proxy(args.complete, e); args.step = function(now) { var rad = now * Math.PI / 180; $(e).css({ top: Math.sin(rad) * radius + offsetY, left: (1 + Math.cos(rad)) * radius + offsetX }); }; $({ deg: angleFrom }).animate({ deg: angleTo }, args); }); }; var left = $() , right = $() , speed = 4000 , currentAngle = 0 , dropAreas = $('.drop-area') , dropAreaLeft = $('.drop-area-left') , dropAreaRight = $('.drop-area-right') , level = $('.level') , easing = 'easeOutElastic' , levelRadius = 80 , halfLevelWeight = 50 , plummetWeight = 100 , plummetOffsetTop = parseFloat(dropAreas.css('top')) , plummetDistance = 10; function animate() { var leftWeight = halfLevelWeight + left.length * plummetWeight , rightWeight = halfLevelWeight + right.length * plummetWeight , angle = (rightWeight - leftWeight) / (rightWeight + leftWeight) * 90; level.animateRotate(currentAngle, angle, speed, easing); var offset = plummetOffsetTop; left.each(function() { $(this).animateCircularPath(180 + currentAngle, 180 + angle, levelRadius, 0, offset, speed, easing); offset += plummetDistance + plummetOffsetTop; }); offset = plummetOffsetTop; right.each(function() { $(this).animateCircularPath(currentAngle, angle, levelRadius, 0, offset, speed, easing); offset += plummetDistance + plummetOffsetTop; }); offset = plummetOffsetTop + left.length * (plummetDistance + plummetOffsetTop); dropAreaLeft.animateCircularPath(180 + currentAngle, 180 + angle, levelRadius, 0, offset, speed, easing); offset = plummetOffsetTop + right.length * (plummetDistance + plummetOffsetTop); dropAreaRight.animateCircularPath(currentAngle, angle, levelRadius, 0, offset, speed, easing); currentAngle = angle; } $('.plummet').draggable({ revert: 'invalid', start: function(e, ui) { dropAreas.show(); }, stop: function(e, ui) { dropAreas.hide(); } }); dropAreas.droppable({ drop: function(e, ui) { ui.draggable.css({ left: $(this).css('left'), top: $(this).css('top') }).draggable('disable'); if ($(this).hasClass('drop-area-left')) { left = left.add(ui.draggable); } else { right = right.add(ui.draggable); } animate(); } }); .container { height: 300px; left: 100px; position: absolute; top: 100px; width: 200px; } .container * { box-sizing: border-box; } .base { border: 1px solid; bottom: 0; height: 10px; left: 50px; position: absolute; width: 100px; } .stand { border: 1px solid; height: 300px; position: absolute; left: 95px; top: 0; width: 10px; } .level { border: 1px solid; height: 10px; left: 0; position: absolute; top: 0; width: 200px; } .drop-area { border: 1px dashed; display: none; height: 40px; position: absolute; top: 40px; width: 40px; } .drop-area-left { left: 0; } .drop-area-right { right: 0; } .plummet { border: 1px solid; bottom: 0; cursor: pointer; height: 40px; position: absolute; width: 40px; } .plummet-1 { right: 0; } .plummet-2 { right: -50px; } .plummet-3 { right: -100px; } .plummet-4 { right: -150px; } .ui-droppable-hover { border: 2px solid; } .ui-draggable-disabled { cursor: default; }


вторник, 17 декабря 2019 г.

Как отличить события клика по элементу от его перетаскивания?

#javascript #jquery #jquery_ui


Имеется 
на странице. Через js добавили метод .draggable() и обработчик клика. Как отличать эти события и работать с ними не зависимо друг от друга?


Ответы

Ответ 1



Есть различие между mousemove, mousedown и mouseup. Вы можете сделать что-то вроде этого: var flag = 0; var element = document.getElementById('draggable'); $("#draggable").draggable(); element.addEventListener("mousedown", function(){ flag = 0; }, false); element.addEventListener("mousemove", function(){ flag = 1; }, false); element.addEventListener("mouseup", function(){ if(flag === 0){ console.log("click"); } else if(flag === 1){ console.log("drag"); } }, false);
Drag or click me>
Для нубов: это выводится в консоль. И это работает.

суббота, 14 декабря 2019 г.

Добавление видео с youtube для вконтакте (с помощью jQuery или javascript)

#javascript #jquery #jquery_ui


Не получается добавить видео с помощью ссылки ютуба для вконтакте (в автомат режиме,
с помощью javascript или jQuery).
Добавил код ссылки ютуба в нужное место (страница Видеозаписи вконтакте):

jQuery("input#video_external_link").val("ссылка видео ютуба");


или с яваскриптом:

document.querySelectorAll("input#video_external_link")[0].value = "ссылка видео ютуба"


Но ничего не происходит, должна была выйти вся подробная информация о видео ютуба
(с кнопкой добавления вконтакте), которую хочу добавить.

Пробовал jQuery("body *").focus().blur(); — работает только если мышка в фокусе в
текущем браузере, а если находится вне браузера, то опять ничего не происходит, хочу
чтобы всегда работал.

Вот пример, как происходит:

Если вручную:



Если с помощью яваскрипта:

Код:



Результат:



По последнему скриншоту видно что не реагирует на ссылку, которую ставили с помощью
кода. 
Чего здесь не хватает, чтобы все заработало?
    


Ответы

Ответ 1



У меня вот так работает const el = document.querySelector('#video_external_link'); el.value = 'https://www.youtube.com/watch?v=RbESB3qHWOw'; triggerEvent(el, 'blur');

Ответ 2



Так работает var vid = document.getElementById("video_external_link");//получаем элемент vid.value = "ссылка";//записываем ссылку var foc = new Event("focus");// содаем событие фокус var bl = new Event("blur"); // создаем событие блюр vid.dispatchEvent(foc); //фокусим input vid.dispatchEvent(bl); //вызываем событие blur

среда, 11 декабря 2019 г.

Как остановить эффект прокрутки (перескок) после перетаскивания?

#javascript #jquery_ui


Я делаю канбан-доску для работы с заявками. Естественно статусов много и по этому
пришлось прикрутить скролл. Пробую прикрутить smoothDivScroll

Таблица  выглядит так 


Код js такой:

$(document).ready(function (){
$("div.scroller-right-content").smoothDivScroll({
  //прокрутка с помощью колеса мыши
  //по всем направлениям (не все мыши имеют такую возможность)
  mousewheelScrolling: false,
  manualContinuousScrolling: false, //Бесконечный цикл
  touchScrolling:true,
  /*
  "" - пустая строка сделает стрелки для прокрутки невидимыми всегда.
  hover - сделает стрелки для прокрутки видимым, только при наведении мыши на скроллер.
  onStart - делает стрелки для прокрутки видимыми n секунд
  always - стрелки для прокрутки видны все время.
  */
        visibleHotSpotBackgrounds:"always",
        /*
        если предыдущее значение onStart
        через столько миллисекунд стрелки исчезнут                        
        */
  hotSpotsVisibleTime: 2000,
        // автозапуск при загрузке страницы
        // уберите эту строку, если Вам это не нужно
        //autoScrollingMode:onStart,
}); 


$( "" ).sortable({
  connectWith: ".suppilo_status_block",
  cancel: ".title_status_suppilo, .nav, .dropdown, .dropdown-menu, .divider-d, .border-b",
  items: 'li', // Указывает какие элементы в группе могут быть отсортированы. 
  handle: '.drag-item-suppilo-status', //Указывает элемент, при щелчке на который
начнется перетаскивание. 
  helper:'original', // Устанавливает вид элемента помощника  original или clone
  opacity:1, // прозрачность перетаскиваемого элемента
  cursor: 'n-resize', // вид курсора при нажатии
  revert: 'true', // эффект вставляния перетаскиваемого элемента
  placeholder:"ui-state-highlight",
  start: function (){
    $('.scrollWrapper').css('overflow','visible'); // меняем на visible чтобы не
крутилось, когда берем элемент. 
  },
  beforeStop: function (event, ui){
    $('.scrollWrapper').css('overflow','hidden');  // меняем на hidden возобновить
прокрутку
    var id_status = ui.item.parent().data('id-status');
    var id_order = ui.item.data('id');
    console.log(''+ui.item.data('id')+' из '+ui.item.parent().data('id-status')+'');
  //... код ajax сохранить
  } 

}).disableSelection();


});


Описание: Чтобы отключить прокрутку вовремя перетаскивания, пришлось (кустарно) в
момент начала перетаскивания изменять css значение области .scrollWrapper прокрутки
с overflow:hidden на overflow:visible (в коде подписано где это), только после этого
можно перетаскивать в нужную область. Пока скроллер не крутишь все работает нормально,
все меняется когда немного прокрутишь вправо...

Проблема: Когда я например прокрутил слайдер чуть-чуть вбок, начал перетаскивать
элемент, то после отпускания перетаскиваемого элемента происходит перескок на начальную
видимость таблицы. Это проблема. Перескока не должно быть, после перетаскивания скроллер
должен включиться и остаться на месте. Как решить, может можно останавливать скроллер
на время перетаскивания как-то иначе?
    


Ответы

Ответ 1



Попробуйте останавливать скроллер путем отключения его экш-скролл блоков .disabled { display: none !important } - start: function (){ $('.scrollingHotSpotLeft').addClass('disabled'); $('.scrollingHotSpotRight').addClass('disabled'); } beforeStop: function (event, ui){ $('.scrollingHotSpotLeft').removeClass('disabled'); $('.scrollingHotSpotRight').removeClass('disabled'); }

воскресенье, 1 декабря 2019 г.

Что означает доллар?

#jquery #jquery_ui


Здравствуйте. Не могу понять, что означает эта запись на jQuery:
var $tab_title_input = $( "#tab_title"),

Насколько я знаю, знак доллара обычно обозначает какую-то функцию (или слово jQuery).
Что этим хотели сказать разработчики? Пример взят с офсайта jQuery.    


Ответы

Ответ 1



Знак доллара является разрешенным символов для идентификатора в языке Javascript. jQuery использует знак $ как псевдоним (сокращение) для идентификтора jQuery. То есть в данном конкретном случае $tab_title_input - просто имя, включающее знак доллара, $( "#tab_title") - вызов функции jQuery.

Ответ 2



Нашел в одной статье, думаю это будет полезно к сведению. Венгерская нотация (Советы: как писать качественный код на jQuery) Если говорить простыми словами, венгерская нотация1 в jQuery — это когда в начале переменной стоит символ доллара, и вам легко сразу понять, что эта переменная содержит jQuery-объект. // плохо var first = $('#first'); var second = $('#second'); var value = $first.val(); // хорошо - перед объектами, которые управляются jQuery, мы ставим символ $ var $first = $('#first'); var $second = $('#second'), var value = $first.val();

Ответ 3



function $(id) { return document.getElementById(id); } $("mydiv").onclick = function() { //some actions } К примеру когда я обращаюсь к DOM элементам используя функцию выше, я хочу сказатать что использовать знак $ для меня просто удобно! Я не сторонник Jquery, и свои велосипеды тоже умеют ездить!

Ответ 4



$ у переменной значит, что это объект jQuery

Ответ 5



Инициализация (то бишь она же идентификация, обозначение что это jQuery дабы не вызывать конфликтов)jQuery. P.S. Не объект, не закос под пшп, это инициализация! Так же может использоваться как простой символ в имени переменной, либо как вызов функции.

суббота, 6 июля 2019 г.

Проблема с JQuery

Пользуюсь библиотекой jqery-ui, и при разработке появилась проблема того, что на один draggable-элемент могут реагировать сразу 2 droppable-элемента. Мне нужно чтобы мог реагировать только один. При этом у draggable-элемента задан tolerance: 'touch'. Схематично проблему я попытался изобразить на картинке:


Ответ

В общем, ждать ответ на свой комментарий у меня нет сегодня времени, поэтому я наугад смодулировал ситуацию. Посмотрите рабочий пример и если поможет, то плиззз )) Draggable

  • Droppable
  • Droppable
  • Droppable
  • Droppable
  • Droppable
- #drop_list { width: 145px; } #drop_list li, #drag_el { padding: 15px 35px; border: 1px solid #900; margin: 2px; } #drag_el { float: right; background: #FF0; } .red { background: #F00; color: #FFF; } .green { background: #0F0; color: #FFF; } - $('#drag_el').draggable({cursor: 'move'}); $('#drop_list li').droppable({ hoverClass: 'green', drop: function() { $(this).addClass('red'); $('#drop_list li').not(this).removeClass('red'); } });

среда, 12 июня 2019 г.

jquery ui resizible как убрать стрелки для ресайза

Как убрать стрелки ресайза с правой и нижней стороны блока. Чтобы стрелка для ресайза появлялась и работала только по ярлычку в правом нижнем углу блока. Или просто только по правому нижнему углу.


Ответ

Вам нужно свойство handles
Свойство определяет объекты, которые будут использованы для изменения размера области. По умолчанию оно имеет значение 'e, s, se', что означает:
e — правый (восток) s — нижний (юг) se — нижний правый (юго-восток)
Вам нужен только se — нижний правый
$('#resizable').resizable({ handles: 'se' });
$('#resizable').resizable({ handles: 'se' });

Resizable


среда, 6 марта 2019 г.

Как связать инпуты с ползунком range slider для вывода результата?

Можно ли как-то связать значения инпутов from и to range slider при их редактировании (ввод значений в поля) с функцией getValues(values), вычисляющей разницу to - from?
Пример на codepen
На данный момент происходит вычисление только при перетаскивании ползунков. Меняю ползунки слайдера - вычисляется total, ввожу в поля input свои значения - не вычисляется total )
'use strict'; $(document).ready(function() { console.log('Hello, world!'); // ---------------------------------- Range slider jq ui $('.filter__slider-element').each(function() { var $this = $(this), container = $this.closest('.filter__slider'), min = parseInt($this.data('min')), max = parseInt($this.data('max')), from = container.find('.filter__slider-input-from'), to = container.find('.filter__slider-input-to'); from.change(function() { $('.filter__slider-element').slider('values', 0, from.val()); }); to.change(function() { $('.filter__slider-element').slider('values', 1, to.val()); }); $this.slider({ range: true, min: min, max: max, values: [min, max], slide: function(event, ui) { // При каждом перемещении var values = $(this).slider('option', 'values'); from.val(ui.values[0]); to.val(ui.values[1]); getValues(ui.values); }, // change: function(event, ui) { // В конце перетаскивания // getValues(ui.values); // }, create: function() { // При создании виджета var values = $(this).slider('option', 'values'); from.val(values[0]); to.val(values[1]); //getValues(); }, stop: function(event, ui) { // При завершении перетаскивания getValues(ui.values); } }); }); function getValues(values) { var total = 0; $('.filter__slider-element').each(function() { var values = $(this).slider("option", "values"); var dif = values[1] - values[0]; total += dif; }); $("#totals").text(total); } }); .form { padding: 3rem 0; }

from
to

from
to

Total: 0


Ответ

При установке свойства values происходит событие change, поэтому его стоит раскомментировать и все заработает.
'use strict'; $(document).ready(function() { console.log('Hello, world!'); // ---------------------------------- Range slider jq ui $('.filter__slider-element').each(function() { var $this = $(this), container = $this.closest('.filter__slider'), min = parseInt($this.data('min')), max = parseInt($this.data('max')), from = container.find('.filter__slider-input-from'), to = container.find('.filter__slider-input-to'); from.change(function() { $this.slider('values', 0, from.val()); }); to.change(function() { $this.slider('values', 1, to.val()); }); $this.slider({ range: true, min: min, max: max, values: [min, max], slide: function(event, ui) { // При каждом перемещении var values = $(this).slider('option', 'values'); from.val(ui.values[0]); to.val(ui.values[1]); getValues(ui.values); }, change: function(event, ui) { // В конце перетаскивания console.log('change'); getValues(ui.values); }, create: function() { // При создании виджета var values = $(this).slider('option', 'values'); from.val(values[0]); to.val(values[1]); //getValues(); }, stop: function(event, ui) { // При завершении перетаскивания getValues(ui.values); } }); }); function getValues(values) { var total = 0; $('.filter__slider-element').each(function() { var values = $(this).slider("option", "values"); var dif = values[1] - values[0]; total += dif; }); $("#totals").text(total); } }); .form { padding: 3rem 0; }

from
to

from
to

Total: 0

среда, 14 ноября 2018 г.

Реализация равновесия(аналог весов с песком )

И так у нас есть терезы , к ним мы будем вешать блоки ( реализовал через draggable) !Как сделать так чтоб , когда вешаем на терезы блок они опускались в низ, когда добавляли вес с другой стороны , тогда они приводились в равновесия!
$(".state").draggable(); $('.obj_block1').draggable(); $(".top").draggable(); .state { background-image: url(../img/Object1.png); background-repeat: no-repeat; height: 401px; width: 300px; cursor: pointer; } .top { background-image: url(93bus.png); background-repeat: no-repeat; height: 40px; width: 400px; cursor: pointer; } .obj_block1 { background-image: url(../img/block1.png); background-repeat: no-repeat; height: 70px; width: 70px; cursor: pointer; }



Ответ

$.fn.animateRotate = function(angleFrom, angleTo, duration, easing, complete) { var args = $.speed(duration, easing, complete); return this.each(function(i, e) { args.complete = $.proxy(args.complete, e); args.step = function(now) { $.style(e, 'transform', 'rotate(' + now + 'deg)'); }; $({ deg: angleFrom }).animate({ deg: angleTo }, args); }); }; $.fn.animateCircularPath = function(angleFrom, angleTo, radius, offsetX, offsetY, duration, easing, complete) { var args = $.speed(duration, easing, complete); return this.each(function(i, e) { args.complete = $.proxy(args.complete, e); args.step = function(now) { var rad = now * Math.PI / 180; $(e).css({ top: Math.sin(rad) * radius + offsetY, left: (1 + Math.cos(rad)) * radius + offsetX }); }; $({ deg: angleFrom }).animate({ deg: angleTo }, args); }); }; var left = $() , right = $() , speed = 4000 , currentAngle = 0 , dropAreas = $('.drop-area') , dropAreaLeft = $('.drop-area-left') , dropAreaRight = $('.drop-area-right') , level = $('.level') , easing = 'easeOutElastic' , levelRadius = 80 , halfLevelWeight = 50 , plummetWeight = 100 , plummetOffsetTop = parseFloat(dropAreas.css('top')) , plummetDistance = 10; function animate() { var leftWeight = halfLevelWeight + left.length * plummetWeight , rightWeight = halfLevelWeight + right.length * plummetWeight , angle = (rightWeight - leftWeight) / (rightWeight + leftWeight) * 90; level.animateRotate(currentAngle, angle, speed, easing); var offset = plummetOffsetTop; left.each(function() { $(this).animateCircularPath(180 + currentAngle, 180 + angle, levelRadius, 0, offset, speed, easing); offset += plummetDistance + plummetOffsetTop; }); offset = plummetOffsetTop; right.each(function() { $(this).animateCircularPath(currentAngle, angle, levelRadius, 0, offset, speed, easing); offset += plummetDistance + plummetOffsetTop; }); offset = plummetOffsetTop + left.length * (plummetDistance + plummetOffsetTop); dropAreaLeft.animateCircularPath(180 + currentAngle, 180 + angle, levelRadius, 0, offset, speed, easing); offset = plummetOffsetTop + right.length * (plummetDistance + plummetOffsetTop); dropAreaRight.animateCircularPath(currentAngle, angle, levelRadius, 0, offset, speed, easing); currentAngle = angle; } $('.plummet').draggable({ revert: 'invalid', start: function(e, ui) { dropAreas.show(); }, stop: function(e, ui) { dropAreas.hide(); } }); dropAreas.droppable({ drop: function(e, ui) { ui.draggable.css({ left: $(this).css('left'), top: $(this).css('top') }).draggable('disable'); if ($(this).hasClass('drop-area-left')) { left = left.add(ui.draggable); } else { right = right.add(ui.draggable); } animate(); } }); .container { height: 300px; left: 100px; position: absolute; top: 100px; width: 200px; } .container * { box-sizing: border-box; } .base { border: 1px solid; bottom: 0; height: 10px; left: 50px; position: absolute; width: 100px; } .stand { border: 1px solid; height: 300px; position: absolute; left: 95px; top: 0; width: 10px; } .level { border: 1px solid; height: 10px; left: 0; position: absolute; top: 0; width: 200px; } .drop-area { border: 1px dashed; display: none; height: 40px; position: absolute; top: 40px; width: 40px; } .drop-area-left { left: 0; } .drop-area-right { right: 0; } .plummet { border: 1px solid; bottom: 0; cursor: pointer; height: 40px; position: absolute; width: 40px; } .plummet-1 { right: 0; } .plummet-2 { right: -50px; } .plummet-3 { right: -100px; } .plummet-4 { right: -150px; } .ui-droppable-hover { border: 2px solid; } .ui-draggable-disabled { cursor: default; }


суббота, 6 октября 2018 г.

Что означает доллар?

Здравствуйте. Не могу понять, что означает эта запись на jQuery var $tab_title_input = $( "#tab_title"), Насколько я знаю, знак доллара обычно обозначает какую-то функцию (или слово jQuery). Что этим хотели сказать разработчики? Пример взят с офсайта jQuery


Ответ

Знак доллара является разрешенным символов для идентификатора в языке Javascript. jQuery использует знак $ как псевдоним (сокращение) для идентификтора jQuery То есть в данном конкретном случае $tab_title_input - просто имя, включающее знак доллара, $( "#tab_title") - вызов функции jQuery.