﻿//Float: 用于实现浮动层的类.
K2046.Float = {
    //将浮动效果附加到指定的Dom上.
    //options   :   object,浮动的参数.
    //options参数说明
    //delay     :   number,timer的延迟时间.
    //element   :   string/dom,要浮动的Dom或id.
    //top       :   number,指定浮动时要保持的top值.
    //left      :   number,指定浮动时要保持的left值.
    //step      :   number,如果位置发生改变,分step步达到指定位置.
    Attach: function(options) {
        options = options || {};
        options.element = K2046.$(options.element);
        if (!options.element) {
            return;
        }
        options.delay = options.delay || 10;
        options.step = options.step || 5;
        options.top = options.top || (K2046.GetPosition(options.element).y); // - document.documentElement.scrollTop
        options.left = options.left || (K2046.GetPosition(options.element).x); // - document.documentElement.scrollLeft
        options.element.style.position = "absolute";
        options.element.style.top = options.top + "px";
        options.element.style.left = options.left + "px";
        options.Timer = setTimeout(function() { K2046.Float.DoEvent(options) }, options.delay);
    }

    , DoEvent: function(options) {
        clearTimeout(options.Timer);
        var p = K2046.GetPosition(options.element);
        var offset = { x: 0, y: 0 };
        offset.x = document.documentElement.scrollLeft + options.left - p.x;
        offset.y = document.documentElement.scrollTop + options.top - p.y;
        offset.x = K2046.Float.GetStep(offset.x, options.step);
        offset.y = K2046.Float.GetStep(offset.y, options.step);
        options.element.style.top = (parseInt(options.element.style.top) + offset.y) + "px";
        options.element.style.left = (parseInt(options.element.style.left) + offset.x) + "px";
        options.Timer = setTimeout(function() { K2046.Float.DoEvent(options) }, options.delay);
    }

    , GetStep: function(length, step) {
        var result = Math.abs(length) / step;
        result = result < 0 ? 1 : result;
        result = length < 0 ? -result : result;
        return result;
    }
};