/** * Within Viewport jQuery Plugin * * @description Companion plugin for withinviewport.js - determines whether an element is completely within the browser viewport * @author Craig Patik, http://patik.com/ * @version 2.1.2 * @date 2019-08-16 */ (function ($) { /** * $.withinviewport() * @description jQuery method * @param {Object} [settings] optional settings * @return {Collection} Contains all elements that were within the viewport */ $.fn.withinviewport = function (settings) { var opts; var elems; if (typeof settings === 'string') { settings = { sides: settings }; } opts = $.extend({}, settings, { sides: 'all' }); elems = []; this.each(function () { if (withinviewport(this, opts)) { elems.push(this); } }); return $(elems); }; // Main custom selector $.extend($.expr[':'], { 'within-viewport': function (element) { return withinviewport(element, 'all'); } }); /** * Optional enhancements and shortcuts * * @description Uncomment or comment these pieces as they apply to your project and coding preferences */ // Shorthand jQuery methods $.fn.withinviewporttop = function (settings) { var opts; var elems; if (typeof settings === 'string') { settings = { sides: settings }; } opts = $.extend({}, settings, { sides: 'top' }); elems = []; this.each(function () { if (withinviewport(this, opts)) { elems.push(this); } }); return $(elems); }; $.fn.withinviewportright = function (settings) { var opts; var elems; if (typeof settings === 'string') { settings = { sides: settings }; } opts = $.extend({}, settings, { sides: 'right' }); elems = []; this.each(function () { if (withinviewport(this, opts)) { elems.push(this); } }); return $(elems); }; $.fn.withinviewportbottom = function (settings) { var opts; var elems; if (typeof settings === 'string') { settings = { sides: settings }; } opts = $.extend({}, settings, { sides: 'bottom' }); elems = []; this.each(function () { if (withinviewport(this, opts)) { elems.push(this); } }); return $(elems); }; $.fn.withinviewportleft = function (settings) { var opts; var elems; if (typeof settings === 'string') { settings = { sides: settings }; } opts = $.extend({}, settings, { sides: 'left' }); elems = []; this.each(function () { if (withinviewport(this, opts)) { elems.push(this); } }); return $(elems); }; // Custom jQuery selectors $.extend($.expr[':'], { 'within-viewport-top': function (element) { return withinviewport(element, 'top'); }, 'within-viewport-right': function (element) { return withinviewport(element, 'right'); }, 'within-viewport-bottom': function (element) { return withinviewport(element, 'bottom'); }, 'within-viewport-left': function (element) { return withinviewport(element, 'left'); } // Example custom selector: //, // 'within-viewport-top-left-45': function (element) { // return withinviewport(element, {sides:'top left', top: 45, left: 45}); // } }); }(jQuery));