calling one method in 2 ways
Hey,
I've been working on a plug-in which detects weather an element is within the users current view-pane.
The problem is that I want to use it like this:
- $('#randomSelector').isOnScreen();
and like this
- $.isOnScreen({left:200, top:200, width:200, height:200});
but I can't figure out how to write the plugin so the method is defined only one, i've got around it so far by defining it twice.
code:
- (function($) {
- jQuery.extend({
- isOnScreen: function(box, container) {
- //ensure numbers come in as intgers (not strings) and remove 'px' is it's there
- for(var i in box){box[i] = parseFloat(box[i])};
- for(var i in container){container[i] = parseFloat(container[i])};
-
- if(!container){
- container = {
- left: $(window).scrollLeft(),
- top: $(window).scrollTop(),
- width: $(window).width(),
- height: $(window).height()
- }
- }
-
- if( box.left+box.width-container.left > 0 &&
- box.left < container.width+container.left &&
- box.top+box.height-container.top > 0 &&
- box.top < container.height+container.top
- ) return true;
- return false;
- }
- })
- jQuery.fn.isOnScreen = function (container) {
- for(var i in container){container[i] = parseFloat(container[i])};
-
- if(!container){
- container = {
- left: $(window).scrollLeft(),
- top: $(window).scrollTop(),
- width: $(window).width(),
- height: $(window).height()
- }
- }
-
- if( $(this).offset().left+$(this).width()-container.left > 0 &&
- $(this).offset().left < container.width+container.left &&
- $(this).offset().top+$(this).height()-container.top > 0 &&
- $(this).offset().top < container.height+container.top
- ) return true;
- return false;
- }
- })(jQuery);