jQuery插件Round Shadow实现圆角和阴影(原理一)

本文介绍了一个jQuery插件,用于实现HTML元素的圆角和阴影效果。插件提供了三种方案,包括使用table标签、margin和padding属性以及CSS3的box-shadow属性。文章详细解析了这些方案的原理和实现细节。
一、插件介绍
编写该插件的目的是为了较为简单地实现为HTML元素添加圆角和阴影效果,在网上也有不同的方案来该效果,本插件也综合了一部分的实现方案,不过由于浏览器支持问题以及css原生的支持问题导致了最终还是没有一个完美的方案。还是特别期待各大浏览器对css3的支持程度能够越来越高,特别是IE浏览器。由于IE浏览器对HTML标准的支持程度太弱,导致本插件在IE上的表现效果要比其他浏览器差很多。
该插件内置了三种实现方案:
1、使用table标签实现圆角和阴影,该方案的最大好处是阴影的区域的高度和宽度能够随着元素框的内容自动变化,最大的缺点就是改变了所要装饰节点的继承关系,虽然返回的jQuery包装集是改变后的节点集合,但是已不能正确地直接使用该集合找到每个节点的原来的父节点和兄弟节点。故该方案不适合需要保持所装饰节点的继承关系的页面中。
2、使用元素的margin和padding属性,该方案利用了css的框模型,通过调整框的margin和padding将圆角阴影效果的图片放到合适的位置,从而实现视觉效果上的圆角和阴影,该方案的优点是不改变节点的继承关系,只是在该节点添加了三个新节点,并且位于首尾位置,基本上对后续编程不造成影响。但是其缺点是圆角和阴影的宽度只能是背景图片的宽度,若要嵌套使用的话,需要对每层使用不同的背景图片。
3、使用css3的box-shadow属性,该方案实际上是最理想的方案,但是由于其比较新,老版的浏览器将不会支持该属性的使用,而其IE的各版本也不支持css3(不知IE9如何)。所以该方案只能在较新的且非IE的浏览器上看到特别好的效果。在IE中使用该插件也能显示阴影效果,但是圆角效果不能实现,且阴影效果也是差强人意。
以上三种方案,每种方案均存在不同程度的问题,而且可能还有些未知的问题还没有发现,期待能够在以后的工作中不断完善。
二、各方案原理及实现
1、"<table></table>"实现圆角和阴影
a、原理
首先,将圆角和阴影背景分成9个部分,详细如图:

[img]http://dl.iteye.com/upload/attachment/422500/b120538f-f151-3f6e-bd13-ffed3cb61685.png[/img]
所以作为圆角和阴影的效果图片,需要将其裁剪为如图的9个部分,其中顶边和底边的宽度取为1px,左边和右边的高度取为1px,中心面板的宽高各取1px即可。
下一步的操作就是将所裁切的9个部分用表格<table>框住,然后将所装饰的元素的内容部分放到中心面板(center-board)处,下面就是对表格的属性进行设置,使4条边的图片能够随着内容的变化而变化,而不出现缺口。
b、实现
下面便是具体的表格部分的代码,为了使表格能够拥有所装饰节点的定位方式等属性,故在表格外再添加了一层<div>:

roundPanel = jQuery(
'<div class="default-round-shadow">'
+ '<table border="0" cellspacing="0" cellpadding="0">'
+ '<tr class="round-shadow-top">'
+ '<td class="round-shadow-top-left"></td>'
+ '<td class="round-shadow-top-edge"></td>'
+ '<td class="round-shadow-top-right"></td>'
+ '</tr>'
+ '<tr class="round-shadow-body">'
+ '<td class="round-shadow-left-edge"></td>'
+ '<td class="round-shadow-center-board"></td>'
+ '<td class="round-shadow-right-edge"></td>'
+ '</tr>'
+ '<tr class="round-shadow-bottom">'
+ '<td class="round-shadow-bottom-left"></td>'
+ '<td class="round-shadow-bottom-edge"></td>'
+ '<td class="round-shadow-bottom-right"></td>'
+ '</tr>'
+ '</table>'
+ '</div>'
);

下面是所用到的css类:

.default-round-shadow {
}
.default-round-shadow table {
}
/* round shadow panel's top*/
.round-shadow-top-left {
width: 12px;
height: 12px;
background: transparent url("images/default/top_left.png") no-repeat;
}
.round-shadow-top-edge {
height: 12px;
background: transparent url("images/default/top_edge.png") repeat-x;
}
.round-shadow-top-right {
width: 12px;
height: 12px;
background: transparent url("images/default/top_right.png") no-repeat;
}
/* round shadow panel's body*/
.round-shadow-left-edge {
width: 12px;
background: transparent url("images/default/left_edge.png") repeat-y;
}
.round-shadow-center-board {
background: transparent url("images/default/center_board.png") repeat;
}
.round-shadow-right-edge {
width: 12px;
background: transparent url("images/default/right_edge.png") repeat-y;
}
/* round shadow panel's bottom*/
.round-shadow-bottom-left {
width: 12px;
height: 12px;
background: transparent url("images/default/bottom_left.png") no-repeat;
}
.round-shadow-bottom-edge {
height: 12px;
background: transparent url("images/default/bottom_edge.png") repeat-x;
}
.round-shadow-bottom-right {
width: 12px;
height: 12px;
background: transparent url("images/default/bottom_right.png") no-repeat;
}

在css表单中只是对图片的高度和宽度进行了指定,并且规定了图片在x还是y方向上重复出现,在重新定义其他样式的圆角和阴影时需参照上面的方式进行定义。
为了保持所装饰节点的定位方式和外边距,需将原来节点的定位属性和外边距移到表格上:

roundPanel.css({
'position' : element.css('position'),
'top' : element.css('top'),
'left' : element.css('left'),
'margin-top' : element.css('margin-top'),
'margin-right' : element.css('margin-right'),
'margin-bottom' : element.css('margin-bottom'),
'margin-left' : element.css('margin-left')
});
// change the element's margin to zero
element.css({'margin' : '0px','position' : 'static'});

最后将节点添加到面板的中心:

// append this element to round shadow table
roundPanel.find(".round-shadow-body .round-shadow-center-board").append(element.clone());
// replace this element
element.replaceWith(roundPanel);

为了保证插件的可链式操作,最后可以返回所装饰节点装饰后的新的对象:

// return the new node
return centerBoard.children().last();

为了防止已被装饰的元素重复被装饰,故在函数开头添加判断:

// if the element has been roundShadowed,just return
if(element.parent().attr("class") == "round-shadow-center-board"){
return element;
}

上面的操作仅仅是针对一个节点的,在该插件中是一个私有函数,针对包装集的操作如下:

jQuery.fn.defaultRoundShadow = function(options){
var opts = jQuery.extend({},jQuery.fn.defaultRoundShadow.defaults,options);
var panels = jQuery(this);
var size = panels.size();
return panels.each(function(i,p){
// from last to first,just insure the children will be roundShadowed first
var index = size - 1 - i;
var panel = jQuery(panels.get(index));
// relocate this element's brothers
...;
// add round shadow effect,and save new node
panels[index] = defaultRoundShadow(panel.textNodeWrap(opts.tag));
});
};

c、效果截图
以下为使用该方法所生成的效果图:
Opera11下效果:

[img]http://dl.iteye.com/upload/attachment/422511/76456c1e-66af-37c0-a7ea-935b945a649c.bmp[/img]

FireFox3.6下效果:

[img]http://dl.iteye.com/upload/attachment/422509/974e07c3-676d-3759-8e21-e6ce91cc288b.bmp[/img]

IE7下效果:

[img]http://dl.iteye.com/upload/attachment/422507/37fc4110-c181-392f-a167-86dd1758d7b6.bmp[/img]

从上面的截图可以看出该方法在不同浏览器下的表现还是比较一致的,除了在IE7下没能显示边框效果以外,其他的还算正常。


项目已放到Google Code上,可以下载:[url]http://code.google.com/p/jquery-round-shadow/[/url]
[url=http://www.iteye.com/topic/913984]jQuery插件Round Shadow实现圆角和阴影(原理二)[/url]
[url=http://www.iteye.com/topic/913994]jQuery插件Round Shadow实现圆角和阴影(使用)[/url]
内容概要:本文提出了种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术Matlab/Simulink仿真能力的电气工程、自动化、机电体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值