• Почему не копируется iframe, который показывает лайки с вк?

    lazalu68
    @lazalu68
    Salmon
    Не invalid application, а invalid application domain. Когда вы грузите фрейм, ВК проверяет URL/origin привязанный к приложению, ID которого вы прислали в запросе: если вызывающее окно имеет URL/origin соответствующий привязанному, то фрейм грузится. Если нет, то прилетает ошибка Invalid application domain.

    Вкратце: вы не сможете загрузить этот фрейм на страницах с адресом не соответствующим тому, который привязан к приложению с id = 3893440.
    Ответ написан
    Комментировать
  • Javascript как передать значение из функции?

    lazalu68
    @lazalu68
    Salmon
    Можно просто строить маршрут не сразу, а только после выполнения запроса:

    $.ajax({
        ...
        success: function(data) {
            var singlePosition = new google.maps.LatLng(data.props[0].lat, data.props[0].lng);
            var request = {
                origin: coords,
                destination: singlePosition,
                travelMode: google.maps.DirectionsTravelMode.DRIVING
            };
           directionsService.route(...);
           ...
        },
        ...
    });
    Ответ написан
    1 комментарий
  • Правильный пример srcset для тега img?

    lazalu68
    @lazalu68
    Salmon
    Nx отражает отношение реальных пикселей к CSS пикселям (у ретины N = 2).
    В частности, то что описываете вы достигается с помощью size descriptor.

    Webkit demo, Мержевич по теме, соответствующий вопрос на StackOverflow
    Ответ написан
    Комментировать
  • Почему form.submit(); вызывает ajax, а не обычный post?

    lazalu68
    @lazalu68
    Salmon
    Как-то так:

    $('form').submit( function(event) {
        var form = this;
        event.preventDefault();
        setTimeout( function () { 
            form.submit();
        }, 300);
    });


    То есть банально вызывать метод submit у HTMLFormElement, а не у $-объекта.
    Ответ написан
  • Как изменить отображение позиции Яндекс.Карты по клику?

    lazalu68
    @lazalu68
    Salmon
    Вообще обычно ссылки на объекты карт всё таки сохраняются, чтобы их можно было использовать, вот как в вашем случае. Но если их нет, то можно попробовать декорировать конструктор и сохранять эти ссылки например в объекте целевого элемента, как-то так:

    ymaps.ready(function() {
        const old_Map = ymaps.Map;
        
        ymaps.Map = function() {
            var args = Array.prototype.slice.call(arguments);
            
            args.unshift(0);
    
            var obj = new (Function.prototype.bind.apply(old_Map, args));
    
            document.getElementById(args[1]).yaMap = obj;
            return obj;
        }
    });


    После чего вы можете обратиться к объекту карты так:

    document.getElementById('himki').yaMap

    Вот пример, в котором ymaps.Map декорируется, создаётся объект карты, после чего мы к нему обращаемся и в качестве примера центрируем карту на какой-нибудь другой точке. Декоратор нужно выполнять строго сразу после загрузки скрипта Yandex Maps API и в первую очередь по событию ready для ymaps.
    Ответ написан
    Комментировать
  • Как переключить элементы списка (сделать навигацию) с помощью стрелок клавиатуры на Jquery (подгрузка через ajax)?

    lazalu68
    @lazalu68
    Salmon
    В общем небольшие итоги переписки в комментариях: при попытке по нажатию клавиши enter открывать ссылку с помощью $().click генерируется untrusted событие, поэтому ссылка не открывается. Зато нажатие на enter по дефолту открывает ссылку если она в фокусе, это можно сделать с помощью $().focus. А т.к. никакого кеша в помине нет, то четвертый пункт ("Сделать так, чтобы работало с динамически подгружающимися элементами") выполняется автоматически.
    Ответ написан
    Комментировать
  • Как принудительно увеличить высоту блоку?

    lazalu68
    @lazalu68
    Salmon
    Такой возможности нет - вы не имеете доступа к фрейму, к тому же просто нету такой опции, даже в коде:

    MiniWidget
    MiniWidget: function(options) {
          this.id = TradingView.gId();
          this.options = {
            whitelabel: options.whitelabel || "",
            width: TradingView.WidgetAbstract.prototype.fixSize(options.width) || 300,
            height: TradingView.WidgetAbstract.prototype.fixSize(options.height) || 400,
            symbols: options.symbols,
            tabs: options.tabs || "",
            symbols_description: options.symbols_description || "",
            customer: options.customer || "",
            container: options.container_id || "",
            large_chart_url: options.large_chart_url || "",
            large_chart_target: options.large_chart_target || "",
            gridLineColor: options.gridLineColor || "",
            fontColor: options.fontColor || "",
            underLineColor: options.underLineColor || "",
            trendLineColor: options.trendLineColor || "",
            timeAxisBackgroundColor: options.timeAxisBackgroundColor || "",
            activeTickerBackgroundColor: options.activeTickerBackgroundColor || "",
            noGraph: options.noGraph || false,
            locale: options.locale,
            styleTickerActiveBg: options.styleTickerActiveBg || "",
            styleTabActiveBorderColor: options.styleTabActiveBorderColor || "",
            styleTickerBodyFontSize: options.styleTickerBodyFontSize || "",
            styleTickerBodyFontWeight: options.styleTickerBodyFontWeight || "",
            styleTickerHeadFontSize: options.styleTickerHeadFontSize || "",
            styleTickerHeadFontWeight: options.styleTickerHeadFontWeight || "",
            styleTickerChangeDownColor: options.styleTickerChangeDownColor || "",
            styleTickerChangeUpColor: options.styleTickerChangeUpColor || "",
            styleTickerLastDownBg: options.styleTickerLastDownBg || "",
            styleTickerLastUpBg: options.styleTickerLastUpBg || "",
            styleTickerSymbolColor: options.styleTickerSymbolColor || "",
            styleTickerSymbolHoverTextDecoration: options.styleTickerSymbolHoverTextDecoration || "",
            styleTickerActiveSymbolTextDecoration: options.styleTickerActiveSymbolTextDecoration || "",
            styleTabsActiveBorderColor: options.styleTabsActiveBorderColor || "",
            styleTabsNoBorder: options.styleTabsNoBorder || "",
            styleWidgetNoBorder: options.styleWidgetNoBorder || ""
          };
          this.createWidget()
        }


    Так что, вероятно, лучше будет использовать другой вариант виджета, не помню точно какой. Там по дефолту график чуть больше.
    Ответ написан
  • Как отобразить несколько уведомлений в OneSignal?

    lazalu68
    @lazalu68
    Salmon
    Я бы посмотрел что там и как, но к сожалению даже не разобрался как это всё использовать, лол.

    Зато вроде бы в описании коммита все написано довольно прозрачно:

    Allow multiple notifications to be displayed by setting the notification
    tag property if supplied. Notifications with identical tags will replace
    each other.


    То есть вы когда где-то там у себя регистрируете несколько notification, вы им в опциях передаёте разные теги если хотите чтобы сработали все. В ServiceWorker.ts объект опций называется notificationOptions, не знаю как в интерфейсе.
    Ответ написан
  • Клонирование объекта?

    lazalu68
    @lazalu68
    Salmon
    Вы перемудрили. Без шуток.

    Если под лучше вы подразумеваете быстрее, то лучше абсолютно любое решение, даже откровенно в лоб:

    Plain object creation
    const keys = [1,2,3,4,7];
    const final_object = {};
    
    for (var i = 0; i < keys.length; i++) {
    	final_object[ keys[i] ] = { current: 0, default: 1 }; 
    }
    Plain + Constructor
    const keys = [1,2,3,4,7];
    const final_object = {};
    const UnknownObject = function() {
    	this.current = 0;
    	this.default = 1;
    }
    
    for (var i = 0; i < keys.length; i++) {
    	final_object[ keys[i] ] = new UnknownObject();
    }
    Ответ написан
    Комментировать
  • Из-за чего появляется ошибка?

    lazalu68
    @lazalu68
    Salmon
    Первое.

    cannot read property 'lat' of undefined


    "Не может прочитать свойство «lat» неопределенного" © Google Translate
    Вы пытаетесь прочитать свойство "lat" у неопределённого объекта.

    Второе - вы делаете дикую дичь. Разве в теле "цикла" у вас есть хоть одна асинхронная операция, зачем использовать интервал? Собственно, этот момент и привел к ошибке, в цикле вы бы не смогли допустить такой ошибки. Дичь например есть в строке 137.

    Третье - чтобы найти ошибку, посмотрите на ваш "цикл" и посмотрите какое условие должно выполниться чтобы цикл завершился. Это условие неправильно.
    Ответ написан
    Комментировать
  • Как в bootstrap сделать popover окна по hover и появление в зависимости от положения кнопки?

    lazalu68
    @lazalu68
    Salmon
    Если в метод popover передать параметр placement со значением right, то всплывашка появится справа.
    Если передать left, то всплывашка появится слева.

    А если передать функцию, то положение всплывашки будет зависеть от того, что вернёт функция, как в этом примере (upd - 'auto');

    UPD: а если передать auto, то всей этой фигнёй заниматься не придется.
    Ответ написан
    6 комментариев
  • Как создать таблицу Ганна на php + js?

    lazalu68
    @lazalu68
    Salmon
    looping in a spiral

    По ссылке можно видеть до чёрта вариантов реализации того что вам нужно, на многих языках. В том числе на JS, в том числе с циклами, в том числе без циклов (определение значения ячейки по (x,y)).
    Ответ написан
    Комментировать
  • В каком месте задается ширина блока?

    lazalu68
    @lazalu68
    Salmon
    Ответ на ваш вопрос в этой части кода:

    <a class="gallery" href="#testube"><img alt="" src="images/atb_s.jpg" /></a>
    
    <div style="display:none" id="testube">
      <!-- HTML - код ролика -->
      <object width="425" height="344">
        <param name="movie" value="http://www.youtube.com/v/sh08XGBE8qc&hl=ru&fs=1"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/sh08XGBE8qc&hl=ru&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
      </object>
    </div>


    Скрипт (он кстати называется fancybox) не "прописывает" (это слово имеет императивный оттенок), а просто дублирует размеры блока, т.к. контейнер позиционирован абсолютно. Блок как бы сам отвечает за свои размеры.

    И да, последняя версия лучше во всех смыслах.
    Ответ написан
    2 комментария
  • Как оптимизировать фильтр на Jquery?

    lazalu68
    @lazalu68
    Salmon
    1. По-хорошему стоило бы разделить расчёт и рендеринг, то есть одна функция решает какие элементы соответствуют фильтру, а другая занимается стилями. К тому же мне кажется что в данном случае есть смысл использовать классы, так было бы быстрее,
    2. В большинстве случаев если действия пользователя требуют каких-то значительных вычислений, особенно если речь о input, то эффективно бывает их отложить - не сразу выполнять всё, а давать пользователю время ввести запрос и только потом всё считать. Например, как здесь в поиске сверху. Еще меньше лишней нагрузки было бы при наличии некой кнопки, которая стартовала бы расчёты по нажатию на неё,
    3. Наконец, зависания можно вообще исключить, выполняя расчёты в отдельном потоке с помощью Web Worker.


    Покажите новую версию кода.
    Ответ написан
  • Как отрабатывать скрипт jquery, когда он в поле зрения?

    lazalu68
    @lazalu68
    Salmon
    Можно использовать $-сниппет onAppearanceApply.

    el.onAppearanceApply( function(){
        console.log( this.is( el ) ); // true
    } );
    Ответ написан
    Комментировать
  • Как сделать, чтоб при скроллинге в определенном разрешении экрана ховер убирался?

    lazalu68
    @lazalu68
    Salmon
    1. Хардкодить тексты в JS - приемлемо только в целях демонстрации, во всех остальных случаях вам будет категорически неудобно пользоваться такой системой,
    2. У вас просто в CSS есть правило, которое скрывает их при ширине ниже 700, достаточно его убрать,
    3. Как один из вариантов можно просто при скролле вешать на общий для нужных элементов класс, который будет скрывать эти элементы,
    Ответ написан
  • Как запустить выполнение js файла при нажатии на кнопку?

    lazalu68
    @lazalu68
    Salmon
    В подавляющем большинстве случаев надобность в реинициализации целого скрипта свидетельствует о недостатках выбранной архитектуры, т.к. вместо этого гораздо проще выделять процедуры, ответственные за инициализацию, и выполнять их.

    Окна/фреймы взаимодействуют между собой через объекты Window: для доступа к дочернему окну родительское может использовать ссылку которую возвращает метод open ("var child_window = window.open()"), а дочернее может обращаться к родительскому используя свойство opener. Доступ к свойствам есть только у окон принадлежащих одному источнику (origin): если окно с адресом "first.com/page.html" вызовет окно с адресом "second.com/page.html", то оно не будет иметь доступа к его свойствам, а если с адресом "first.com/folder/another-page.html" - то будет.

    Окна/фреймы одного источника могут почти без ограничений обращаться к свойствам друг друга - могут использовать данные, выполнять функции, производить операции с элементами. Достаточно объявить в одном окне функцию, и она сразу станет доступна для дочернего/родительского окна.

    Также взаимодействие можно осуществлять с помощью метода Window.postMessage (MDN, JSR), который к тому же позволяет реализовать кроссдоменный обмен данными. В IE8+ этот метод 1) работает только для фреймов, 2) позволяет передавать только строки.

    Каждый способ имеет преимущества и недостатки: обращение к свойствам другого окна разрешено только в рамках одного источника, а использование postMessage в случаях с более-менее сложными интерфейсами сводится к передаче кастомных ивентов.

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

    Код обоих примеров можно увидеть на гитхабе
    Ответ написан
    Комментировать
  • Как сделать заполнение прогресс бара?

    lazalu68
    @lazalu68
    Salmon
    WOW (хотя если честно функционал WOW избыточен для этого, достаточно просто класс вешать)
    Ответ написан