非常好的一个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 ...