非常好的一个JS代码(RelativePosition.js)
var RelativePosition = function(){
    function getLeft( align, rect, rel ){
        var iLeft = 0;
        switch (align.toLowerCase()) {
            case "left" :
                return rect.left - rel.offsetWidth;
            case "clientleft" :
                return rect.left;
            case "center" :
                return ( rect.left + rect.right - rel.offsetWidth ) / 2;
            case "clientright" :
                return rect.right - rel.offsetWidth;
            case "right" :
            default :
                return rect.right;
        };
    };
    function getTop( valign, rect, rel ){
        var iTop = 0;
        switch (valign.toLowerCase()) {
            case "top" :
                return rect.top - rel.offsetHeight;
            case "clienttop" :
                return rect.top;
            case "center" :
                return ( rect.top + rect.bottom - rel.offsetHeight ) / 2;
            case "clientbottom" :
                return rect.bottom - rel.offsetHeight;
            case "bottom" :
            default :
                return rect.bottom;
        };
    };
    //定位元素 相对定位元素
    return function ( fix, rel, options ) {
        //默认值
        var opt = $$.extend({
            align:            "clientleft",//水平方向定位
            vAlign:            "clienttop",//垂直方向定位
            customLeft:        0,//自定义left定位
            customTop:        0,//自定义top定位
            percentLeft:    0,//自定义left百分比定位
            percentTop:        0,//自定义top百分比定位
            adaptive:        false,//是否自适应定位
            reset:            false//自适应定位时是否重新定位
        }, options || {});
        //定义参数
        var rect = $$D.clientRect(fix)
            ,iLeft = getLeft(opt.align, rect, rel) + opt.customLeft
            ,iTop = getTop(opt.vAlign, rect, rel) + opt.customTop;
        //自定义百分比定位
        if (opt.percentLeft) { iLeft += .01 * opt.percentLeft * fix.offsetWidth; };
        if (opt.percentTop) { iTop += .01 * opt.percentTop * fix.offsetHeight; };
        //自适应视窗定位
        if (opt.adaptive) {
            //修正定位参数
            var doc = fix.ownerDocument
                ,maxLeft = doc.clientWidth - rel.offsetWidth
                ,maxTop = doc.clientHeight - rel.offsetHeight;
            if (opt.reset) {
                //自动重新定位
                if (iLeft > maxLeft || iLeft < 0) {
                    iLeft = getLeft(2 * iLeft > maxLeft ? "left" : "right", rect, rel) + opt.customLeft;
                };
                if (iTop > maxTop || iTop < 0) {
                    iTop = getTop(2 * iTop > maxTop ? "top" : "bottom", rect, rel) + opt.customTop;
                };
            } else {
                //修正到适合位置
                iLeft = Math.max(Math.min(iLeft, maxLeft), 0);
                iTop = Math.max(Math.min(iTop, maxTop), 0);
            };
        };
        //加上滚动条
        iLeft += $$D.getScrollLeft(fix); iTop += $$D.getScrollTop(fix);
        //返回定位参数
        return { Left: iLeft, Top: iTop };
    };
}();
原文来自:
http://www.cnblogs.com/cloudgamer/archive/2009/10/29/Cloudgamer_JavaScript_Library.html
http://www.cnblogs.com/cloudgamer/archive/2009/08/10/FixedMenu.html
非常好的一个JS代码(RelativePosition.js)的更多相关文章
- JavaScript 之 动态加载JS代码或JS文件
		
2.动态加载JS文件 <script type="text/javascript"> function loadScript(url, callback) { var ...
 - 重构JS代码 - 让JS代码平面化
		
js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url', jsonObj, function ...
 - 一个用于将sql脚本转换成实体类的js代码
		
以前写过一段C#,苦于编译才能用.这样的小工具最好是用脚本语言来编写,易于执行,也易于修改. js 代码 convert.js ------------------------------------ ...
 - 利用ajax获取到的网页源码不能执行js代码
		
今天觉得我的博客中加载腾讯微博的速度很慢,所以就想改写为js,本来以为直接新建一个页面,把获取函数移到新的页面中,原来的页面只要使用xmlhttp去GET一下,然后把div的innerhtml属性等于 ...
 - JS代码平面化
		
重构JS代码 - 让JS代码平面化 js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url' ...
 - python 调用js代码
		
Python2 安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 c ...
 - JS代码执行机制
		
JS代码从编译到执行 我们写出一段JS代码,JS的引擎并不是按照我们书写的顺序从上到下顺序编译并且执行的,首先是按照自己的规则对我们的代码先进行编译,然后从上到下执行编译的代码. 在全局作用域中,JS ...
 - 页面加载完之后在执行js代码
		
把代码写在 window.onload = function () { //js代码 //此处js代码是页面完全加载完之后执行 } 即可. 例: <script type="text/ ...
 - 如何在一个网站或者一个页面,去书写你的JS代码
		
// JavaScript Document //如何在一个网站或者一个页面,去书写你的JS代码: //1.js的分层(功能) : jquery(tools) 组件(ui) 应用(app), mvc( ...
 - 一个只有99行代码的JS流程框架
		
张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 最近一直在想一个问题,如何能让js代码写起来更语义化和更具有可读性. 上周末的时候突发奇想,当代码在运 ...
 
随机推荐
- WTL自定义控件:edit内容改变响应
			
头文件内容: BEGIN_MSG_MAP(myEdit) COMMAND_CODE_HANDLER_EX(EN_CHANGE, OnEnChange) END_MSG_MAP()4 void OnEn ...
 - Prism框架中View与Region关联的几种方式
			
Prism.Regions命名空间下有2个重要接口:IRegionManager.IRegion IRegionManager接口中的方法与属性:AddToRegion().RegisterViewW ...
 - SQL Server代码的一种学习方法
			
使用SQL Server Management Studio的操作过程中,界面上方都可以生成sql脚本代码. 如新建数据库时: CREATE DATABASE [db_New] ON PRIMARY ...
 - java输出txt文件到桌面
			
private static void outputTxt(String ExportFailStudentMsg){ FileSystemView fsv = FileSystemView.getF ...
 - angularJS限制 input-text 只能输入数字
			
最初的目的是为了让输入的字段仅为数字,不要包含英文,理所当然想到了正则表达,比起对每一个字符判断ASCII码要方便的多 JS正则表达式的使用,可以参考正则表达式 以match为例,全局匹配非数字 va ...
 - 【面试】Spring 执行流程
			
Spring Aop的实现原理: AOP 的全称是 Aspect Orient Programming ,即面向切面编程.是对 OOP (Object Orient Programming) 的一 ...
 - layui template list
			
//第一步:编写模版.你可以使用一个script标签存放模板,如: <script id="demo" type="text/html"> < ...
 - vue——父组件调用子组件
			
<template> <div> child1 </div> </template> <script> export default { n ...
 - koa 基础(十一)koa 中 koa-bodyparser 中间件获取表单提交的数据
			
1.app.js /** * koa 中 koa-bodyparser 中间件获取表单提交的数据 * 1.npm install --save koa-bodyparser * 2.引入 const ...
 - js如何获取鼠标位置
			
获取鼠标位置,首先需要加载js文件: 然后设置一个div,给定大小: 最后进行具体操作: //首先要先设置一个div,给定大小 <div id="m"></div ...