飘浮元素代码

可以自定义起始位置,速度

by ijse

HTML

<div id="ctner">
    <div id="fdiv"></div>
</div>

CSS

#ctner { width:400px; height:400px; background-color:blue; }
#fdiv { width:60px; height:40px; background-color:pink; cursor:pointer; }

JavaScript

var ff=function(objId,speed,direction) {
    // init params
    var obj = $("#" + objId);
    if(!obj.size()) return false;
    var x,y;
    speed = Number(speed)?speed:10;
    var direction = direction?direction:[-1,1];
    
    var min_x = obj.parent().offset().left;
    var min_y = obj.parent().offset().top;
    var max_x = min_x + obj.parent().width() - obj.width();
    var max_y = min_y + obj.parent().height() - obj.height();
    
    //debug
    $("body").append($("<p>").append("min_x:"+min_x));
    $("body").append($("<p>").append("max_x:"+max_x));
    $("body").append($("<p>").append("min_y:"+min_y));
    $("body").append($("<p>").append("max_y:"+max_y));
    
    // init position
    obj.offset({top:y,left:x});
    
    // init method
    this.intervalHandle="";
    function move() {
        x += direction[0];
        y += direction[1];
        if(x < min_x) {
             x = min_x;
             direction[0] = -direction[0];  
        }
        if(y < min_y) {
             y = min_y;
             direction[1] = -direction[1];
        }
        if(x > max_x) {
             x = max_x;
             direction[0] = -direction[0];
        }
        if(y > max_y) {
             y = max_y;
             direction[1] = -direction[1];  
        }
        obj.offset({top:y,left:x});
    }
    
    // stop while mouse move on 
    obj.hover(function() {
        clearInterval(intervalHandle);
    },function() {
        intervalHandle = setInterval(move,speed);
    });
    return {
        start: function(_x,_y) {
            x = Number(_x)?_x:0;
            y = Number(_y)?_y:0;
            intervalHandle = setInterval(move,speed);
        }
    }
}

$(function() {
    var m = new ff("fdiv",30,[-1,-3]);
    m.start(10,10);
});