• Контекст вызова функции JQuery?

    BRAGA96
    @BRAGA96
    Или так:
    $(this).find('.fas')
    Под катом jQuery выглядит примерно так:
    var $ = function (selector, context) {
        return (context || document).querySelectorAll(selector);
    };
    Ответ написан
    Комментировать
  • Как подключить внешний JSON и обратиться к его ключам?

    BRAGA96
    @BRAGA96
    Я бы сделал как-то так:
    request('http://api.randomuser.me/1.0/', {
        results: 50,
        nat: ['gb', 'us'],
        inc: ['gender', 'name', 'location', 'email', 'phone', 'picture']
    }).get(function (data) {
        console.log(data);
    }, function (error) {
        console.log(error);
    });
    
    request('https://jsonplaceholder.typicode.com/posts', {
        title: 'foo',
        body: 'bar',
        userId: 1
    }).post(function (data) {
        console.log(data);
    }, function (error) {
        console.log(error);
    });
    
    function request(link, params, setup) {
        return {
            get: function (success, error) {
                return ajax(extend({}, {
                    url: link + (params ? '?' + param(params) : ''),
                    method: 'GET',
                    success: success || function () {},
                    error: error || function () {}
                }, setup || {}));
            },
            post: function (success, error) {
                return ajax(extend({}, {
                    url: link,
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json; charset=UTF-8'
                    },
                    data: params,
                    success: success || function () {},
                    error: error || function () {}
                }, setup || {}));
            }
        };
    }
    
    function ajax(params) {
        var setting = extend({}, {
            url: window.location.href,
            method: 'GET',
            async: true,
            data: undefined,
            headers: {
                'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
            },
            success: function (data, xhr, params) {},
            error: function (error, xhr, params) {}
        }, params || {});
        var setHeaders = function (headers) {
            for (var name in headers) {
                this.setRequestHeader(name, headers[name]);
            }
        };
        var xhr = new XMLHttpRequest();
        xhr.open(setting.method, setting.url, setting.async);
        setHeaders.call(xhr, setting.headers);
        xhr.onreadystatechange = function () {
            if (this.readyState === 4) {
                if (this.status >= 200 && this.status < 400) {
                    var data = (function () {
                        try {
                            return JSON.parse(this.response); 
                        } catch (error) {
                            return this.response;
                        }
                    }).call(this);
                    setting.success(data, this, setting);
                } else {
                    setting.error(this.status, this, setting);
                }
            }
        }
        xhr.send(setting.data ? JSON.stringify(setting.data) : null);
        return xhr;
    }
    
    function param(data) {
        var result = '';
        for (var name in data) {
            result += name + '=' + (Array.isArray(data[name]) ? data[name].join(',') : data[name]) + '&';
        }
        return result.slice(0, -1);
    }
    
    function extend(output) {
        output = output || {};
        for (var i = 1; i < arguments.length; i++) {
            if (!arguments[i]) continue;
            for (var key in arguments[i]) {
                if (arguments[i].hasOwnProperty(key)) {
                    output[key] = arguments[i][key];
                }
            }
        }
        return output;
    }


    Но если короче, то вот:
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://api.randomuser.me/1.0/?results=50&nat=gb,us&inc=gender,name,location,email,phone,picture', true);
    xhr.onreadystatechange = function () {
        if (this.readyState === 4) {
            if (this.status >= 200 && this.status < 400) {
                var data = JSON.parse(this.response);
                console.log('Успех', data);
            } else {
                console.log('Ошибка', this);
            }
        }
    }
    xhr.send(null);
    Ответ написан
    Комментировать
  • Как написать асинхронную функцию на чистом JS для мобильного браузера Chrome?

    BRAGA96
    @BRAGA96
    В jQuery есть аналог Promise - Deferred объекты. Если не используете jQuery можете найти и вытянуть отдельные функции или найти уже готовый в сети.
    (function ($) {
        'use strict';
    
        void function main() {
            // Пример использования promise
            promise(function (resolve, reject) {
                resolve('example data');
            }).done(function (data) {
                console.log(data); //> "example data"
            });
    
            // Пример использования promiseAll
            var deferreds = [$.Deferred().resolve(1), $.Deferred().resolve(2), $.Deferred().resolve(3)];
            promiseAll(deferreds).done(function () {
                console.log(arguments); //> [1, 2, 3]
            });
        }();
    
        function promise(callback) {
            var deferred = $.Deferred();
            callback && callback(deferred.resolve, deferred.reject);
            return deferred;
        }
    
        function promiseAll(deferreds) {
            return $.when.apply(null, deferreds);
        }
    
    }(jQuery));
    Ответ написан
    Комментировать
  • Как в fancybox 3 загрузить через ajax только часть html?

    BRAGA96
    @BRAGA96
    Разве что самим сделать запрос, получить html, взять нужный селектор и вставить в окно fancybox
    getFile('plan-floor-pop-up.html', function ($html) {
        return $('#one', $html);
    }).done(function ($html) {
        //> Нужный jQuery Selector для вставки в DOM
    });
    
    function getFile(link, filter) {
        return $.ajax($.extend(true, {}, {
            method: 'GET',
            dataType: 'text',
            dataFilter: function (response) {
                var $html = $(response);
                if (filter) filter($html);
                return $html;
            }
        }, {
            url: link
        }));
    }
    Ответ написан
    Комментировать
  • Preloader как у ...?

    BRAGA96
    @BRAGA96
    Skeleton loading
    Ответ написан
    Комментировать
  • Правильно ли я сделал плагин?

    BRAGA96
    @BRAGA96
    Здесь нечего сказать, просто процедурный плагин, без параметров и внешних методов.
    Вот вам взрослый стартовый шаблон:
    /**
     * @name PluginName
     * @version 1.0.0
     * @description jQuery Plugin
     * @since DD:MM:YYYY
     */
    ;(function ($) {
        'use strict';
    
        /**
         * @description Глобальный объект общих параметров плагина
         * @type {Object}
         */
        var plugin = {
            name: 'PluginName',
            version: '1.0.0',
            data: {
                general: 'general',
                setting: 'setting'
            }
        };
    
        /**
         * @description Параметры инициализации плагина по умолчанию
         * @type {Object}
         */
        var defaults = {
    
        };
    
        /**
         * @description Объект свойст для работы плагина
         * @type {Object}
         */
        var operative = {
            context: null,
            type: 'init',
            method: 'init'
        };
    
        /**
         * @description Объект публичных методов плагина
         * @type {Object<Function>}
         */
        var api = {};
    
        /**
         * @description Метод инициализации плагина
         * @type {Function}
         * @param {jQuery HTMLElement} $this jQuery DOM элемент на который инициализировали плагин
         * @param {Object} options Объект параметров инициализации
         * @param {Object} common Объект дополнительных параметров для работы плагина
         * @returns {jQuery HTMLElement} this
         */
        api.init = function ($this, options, common) {
            var setting = pluginSetting($this).set(plugin.data.setting, $.extend(true, {}, defaults, options));
            var general = pluginSetting($this).set(plugin.data.general, $.extend(true, {}, operative, common));
    
            //> Код плагина
    
            return $this;
        };
    
        /**
         * @description Метод получения параметров инициализации плагина
         * @type {Function}
         * @this {HTMLElement} DOM элемент на который инициализировали плагин
         * @param {String} [category = plugin.data.setting] Категория параметров, например "setting" или "general"
         * @param {String} key Ключ объекта параметров
         * @returns {Object | null} Объект параметров или null
         */
        api.get = function (category, key) {
            var params = pluginSetting($(this)).get(category || plugin.data.setting);
            return key ? params && params[key] ? params[key] : null : params || null;
        };
    
        /**
         * @description Метод установки новых значения и реинициализация плагина
         * @type {Function}
         * @this {HTMLElement} DOM элемент на который инициализировали плагин
         * @param {Object} params Объект новых параметров
         * @returns {HTMLElement} this
         */
        api.set = function (params) {
            var setting = pluginSetting($(this)).get(plugin.data.setting);
            return api.init($(this), $.extend(true, {}, setting, params), {
                context: this,
                type: 'update',
                method: 'set'
            });
        };
    
        /**
         * @description Метод получения текущей версии плагина
         * @type {Function}
         * @this {HTMLElement} DOM элемент на который инициализировали плагин
         * @returns {String} Версия плагина, например "1.0.0"
         */
        api.version = function () {
            return plugin.version;
        };
    
        /**
         * @description Проверить на Объект тип переданной сущности
         * @param {*} value Сущность
         * @returns {Boolean}
         */
        function isObject(value) {
            return typeof value === 'object' && !Array.isArray(value) && value !== null;
        }
    
        /**
         * @description Установить/получить настройки плагина
         * @type {Function}
         * @param {jQuery HTMLElement} $selector jQuery DOM элемент на который будут установленны настройки
         * @returns {Object<Function>} Объект методов
         */
        function pluginSetting($selector) {
            return {
                set: function (key, setting, filter) {
                    var current = this.get(key);
                    var params = $.extend(true, {}, current, setting);
                    if (filter) filter(params);
                    $selector.data(plugin.name, $.extend(true, {}, this.get(), createObjectWithKey(key, params)));
                    return params;
                },
                get: function (key) {
                    var data = $selector.data(plugin.name);
                    return key ? data && data[key] ? data[key] : null : data || null;
                }
            };
        }
    
        /**
         * @description Получить объект с переданным ключом и значением
         * @param {String} key Ключ объекта 
         * @param {*} value Значение свойства объекта
         * @returns {Object} 
         */
        function createObjectWithKey(key, value) {
            var object = {};
            object[key] = value;
            return object;
        }
    
        /**
         * @description Установка методов плагина на глобальный объект jQuery
         * @type {Function}
         * @this {jQuery HTMLElement} jQuery DOM элемент на который инициализировали плагин
         * @param {Object | String} Параметры инициализации плагина или название метода
         * @returns {jQuery HTMLElement | *} this или результат вызова метода
         */
        $.fn[plugin.name] = function (setting) {
            if (isObject(setting) || !setting) {
                return $.each(this, function () {
                    api.init($(this), setting, {
                        context: this,
                        type: 'init',
                        method: 'init'
                    });
                });
            } else if (typeof setting === 'string') {
                var args = [].slice.call(arguments, 1);
                var method = setting.toLowerCase();
                for (var i = 0; i < this.get().length; i++) {
                    if (method === 'init') break;
                    var context = this.get(i);
                    if (['get', 'version'].includes(method)) {
                        return api[method].apply(context, args);
                    } else {
                        api[method].apply(context, args);
                    }
                }
            }
            return this;
        };
    
    })(jQuery);
    Ответ написан
    Комментировать
  • Как сделать кросс-доменный запрос в Redux-Saga?

    BRAGA96
    @BRAGA96
    Чтобы вы не отправляли с браузера, если на сайте, куда вы делаете запрос не разрешен CORS, то ничего не получится. Серверный запрос будет работать, пробовал из под Nodejs.
    Ответ написан
    1 комментарий
  • Почему не работает required?

    BRAGA96
    @BRAGA96
    <FORM NAME="form" onSubmit="return Complete();">
    <BUTTON TYPE="submit">Готово</BUTTON>
    Ответ написан
    1 комментарий
  • Почему зависает browsersync?

    BRAGA96
    @BRAGA96
    Попробуйте запустить так:
    browser-sync start --server "название папки" --files "название папки"

    В вашем случае browser-sync следит за всеми файлами на том уровне, где вы его запустили.

    Оффтоп: Если у Вас Windows можете использовать данный .bat файл для запуска. Вставьте его в деректорию на уровне index.html и запустите.
    Ответ написан
    Комментировать
  • Как выполнять jquery когда меняется слайд owl-carusel?

    BRAGA96
    @BRAGA96
    Документация
    • change.owl.carousel
    • changed.owl.carousel
    var owl = $('.owl-carousel');
    owl.owlCarousel();
    // Listen to owl events:
    owl.on('changed.owl.carousel', function(event) {
        //> ваша функция
    })
    Ответ написан
    Комментировать
  • Как в JS проверить является ли объект файлом?

    BRAGA96
    @BRAGA96
    var file = new File(["foo"], "foo.txt", {
      type: "text/plain",
    });
    
    console.log(type(file)); //> "file"
    
    function type(obj) {
    	return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
    }
    Ответ написан
    Комментировать
  • Как использовать в функции возвращенное значение JSON?

    BRAGA96
    @BRAGA96
    Прочитайте про асинхронность
    var user = {};
    
    $.getJSON('https://api.ipify.org/?format=json', function(data) {
    	user = data;
    	console.log(user);
    });


    или

    var user = {};
    
    getUserInfo().then(function() {
    	console.log(user);
    });
    
    function getUserInfo() {
    	return $.getJSON('https://api.ipify.org/?format=json', function(data) {
    		user = data;
    	});
    }
    Ответ написан
    Комментировать
  • Как ускорить ajax-запрос?

    BRAGA96
    @BRAGA96
    Ajax запрос ускорить не возможно. Можно просто сделать запрос раньше, чем браузер будет парсить dom, js, почитайте про link preload html. Таким же образом можно ускорить загрузку js, css файлов. Все скрипты опустить к </body>
    Ответ написан
    Комментировать
  • Что это за плагин?

    BRAGA96
    @BRAGA96
    Tilt.js + добавления css классов с blur.
    Ответ написан
    Комментировать
  • Redirect в аякс-ответе?

    BRAGA96
    @BRAGA96
    Примерно так:
    $.ajax({
    	url: 'https://jsonplaceholder.typicode.com/posts',
    	method: 'GET',
    	dataType: 'json',
    	success: function(posts) {
    		window.location.href = posts[0].title;
    	}
    });
    Ответ написан
    Комментировать
  • Как по клику на один элемент увеличивать другой?

    BRAGA96
    @BRAGA96
    Ответ написан
    Комментировать
  • Откуда отступ в owl-carousel?

    BRAGA96
    @BRAGA96
    Причина та же, что и здесь. Дайте контейнеру font-size: 0;
    Ответ написан