非常好的一个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代码写起来更语义化和更具有可读性. 上周末的时候突发奇想,当代码在运 ...
随机推荐
- vue css采用别名引入背景图
在vue css中采用别名引入 背景图片,可以在前面加一个波浪号 css 属性中: background: url("~@/assets/xxx.jpg") Webpack 会将以 ...
- 6.Servlet、Filter过滤器以及监听器
Servlet 是运行在Web服务器端的Java程序,它使用Java语言编写,与Java程序的区别是Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持,在Jav ...
- canvas风景时钟
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python-pyhs2
#!/usr/bin/env python # -*- coding: utf-8 -*- # hive util with hive server2 """ @auth ...
- Vuex的基本原理与使用
我们需要知道 vue 是单向数据流的方式驱动的 什么是vuex? 为什么要使用vuex ? - 多个视图依赖于同一状态. - 来自不同视图的行为需要变更同一状态. vuex 类似Redux 的状态管理 ...
- unity的Tilemap学习笔记
1,如果要实现当tilemap里面的格子与其他的对象发生碰撞后,消除碰撞的那个格子,使用如下代码. void OnCollisionEnter2D(Collision2D collision) { V ...
- Linux常用文本处理命令
1.grep命令 echo 'zero\nzo\nzoo' | grep 'z.*o':将匹配以'z'开头以'o'结尾的所有字符串 echo 'zero\nzo\nzoo' | grep 'z.o': ...
- centos7配置外网
1设置网络连接中的NAT网络配置 2虚拟机的网络设置选择NAT连接设置如下,子网IP可通过ipconfig查看本地VMnet8,如我本地VMnet8 ip为:192.168.198.0 3 3.开启虚 ...
- RN中webview的一些思考
刚开始只是对接一下RN,h5部分,嵌套在RN里的webview里需要隐藏一些原生的按钮,遇到很多沟通上的问题,本来没使用RN之前,也是嵌套在webview里,也没什么问题,突然RN嵌套就有问题了,对方 ...
- DBCP连接池参数解释
1.<!-- 数据源1 --> 2. <bean id="dataSource" 3. class="org.apache.commons.dbcp.B ...