`
flytreeleft
  • 浏览: 93307 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

jQuery插件Round 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个部分,详细如图:


所以作为圆角和阴影的效果图片,需要将其裁剪为如图的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下效果:



FireFox3.6下效果:



IE7下效果:



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


项目已放到Google Code上,可以下载:http://code.google.com/p/jquery-round-shadow/
jQuery插件Round Shadow实现圆角和阴影(原理二)
jQuery插件Round Shadow实现圆角和阴影(使用)
  • 大小: 21.1 KB
  • 大小: 5.6 KB
  • 大小: 5.8 KB
  • 大小: 5.6 KB
分享到:
评论

相关推荐

    jQuery Round Shadow

    jQuery Round Shadow是一个用于在网页上实现圆角阴影效果的JavaScript库。这个库主要目标是为网页元素添加平滑、美观的圆形或弧形阴影,从而提升网页设计的视觉吸引力。在传统的CSS技术中,实现这样的效果往往需要...

    我的第一个jQuery插件 -- 圆角DIV

    标题 "我的第一个jQuery插件 -- 圆角DIV" 指涉的是一个关于创建自定义jQuery插件的教程,该插件主要用于实现HTML元素(尤其是DIV)的圆角效果。在早期的Web开发中,CSS2无法直接创建圆角,所以开发者会利用...

    jquery实现圆角实例

    在本实例中,我们将探讨如何利用 jQuery 来实现元素的圆角效果,包括层的圆角和背景的圆角。 首先,要实现 jQuery 圆角功能,我们需要理解 CSS3 的 border-radius 属性,这是原生支持元素圆角的关键。在 CSS3 中,...

    jquery插件集-圆角效果

    综上所述,"jquery插件集-圆角效果" 提供了一种利用 jQuery 实现网页圆角效果的方法,适用于那些需要兼容旧版浏览器或希望用 JavaScript 动态改变圆角效果的场景。通过扩展 jQuery 对象,我们可以轻松地将圆角效果...

    jQuery实现超酷真实阴影效果 jQuery插件realshadow实现超酷真实阴影效果.zip

    本文将详细介绍如何使用jQuery插件`realshadow`来实现超酷的真实阴影效果,以及与之相关的前端技术,包括CSS、JavaScript、HTML5和jQuery。 首先,jQuery是一种流行的JavaScript库,它简化了DOM操作、事件处理、...

    jQuery圆角插件:jquery.corners.js

    jQuery圆角插件,如`jquery.corners.js`,是前端开发中常见的一种工具,用于在网页元素上实现圆角效果。在Web设计中,圆角可以为界面增添柔和感和现代感,使得用户界面更加友好。在CSS3之前,创建圆角效果通常需要...

    Jquery实现圆角边框效果的源码

    总的来说,jQuery CurvyCorners插件是利用jQuery实现跨浏览器圆角边框效果的一种有效方法,它为那些不支持CSS3圆角的浏览器提供了补救措施。在实际开发中,根据项目需求和目标用户的浏览器使用情况,可以选择是否...

    jQuery插件之圆角插件.

    jQuery插件是JavaScript库jQuery的一种扩展,用于增加特定功能或简化特定任务的实现。在本例中,我们关注的是“jQuery插件之圆角插件”,这是一个专门用于为HTML元素添加圆角效果的工具。在早期的Web开发中,创建...

    jQuery圆角插件,实现兼容浏览器圆角效果

    但是这些方法在实现的过程中,总是会增加很多无谓的工作任务,而且还有可能无法做到浏览器之间的兼容性,那么就介绍一个非常简单的jQuery圆角实现效果吧,说是圆角有点小看它了,因为它可以实现的不止是圆角,看这...

    jquery 圆角插件 jquery-corners-0.3.zip

    jQuery-corners插件还提供了多种可定制的参数,允许开发者调整圆角的大小、阴影效果、边角类型(如只设置四个角中的某一个或两个),以及是否在IE6和IE7这样的老版本浏览器中启用圆角效果。这些参数可以作为对象传递...

    jQuery Canvas Rounded Corners - jQuery圆角插件

    而`jquery.corners.js`则是jQuery圆角插件的主要脚本,它包含实现圆角效果的函数和逻辑。 在页面中引入这些文件后,可以通过jQuery选择器选取需要添加圆角效果的元素,并调用`.corners()`方法来应用插件。例如: `...

    jquery插件库大全(200个).zip

    jquery实现网易邮箱首页插件 jquery导航,缓慢弹出下拉效果 jquery左侧导航滑动网页定位效果 jquery左侧弹出二级菜单 jquery弹出层 jquery弹出层 三种弹出效果 jquery弹出插件 jquery抽奖插件 jquery抽奖插件.rar ...

    圆角带阴影的jquery气泡浮动提示特效.rar

    这个压缩包文件提供了一个实现特定视觉效果的源码示例,它是一个利用jQuery插件创建的、带有圆角和阴影的气泡式浮动提示效果。 首先,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画和...

    生成各种阴影效果的jQuery插件.rar_southernl1r_生成各种阴影效果的jQuery插件

    总结来说,这款“生成各种阴影效果的jQuery插件”是为了简化CSS3阴影的使用,提供了一种直观、便捷的方式来创建和管理元素的阴影效果,使得开发者能更专注于整体的设计和用户体验,而无需在阴影的细节上花费过多精力...

    CSS3实现圆角阴影渐变效果兼容IE等浏览器

    在现代网页设计中,CSS3已经成为了不可或缺的一部分,它提供了许多增强视觉效果的功能,比如圆角、阴影和渐变。本文将深入探讨如何利用CSS3实现圆角、阴影和渐变效果,并确保这些效果在包括IE在内的主流浏览器中都能...

    jquery插件corner实现圆角边框的方法

    8. corner插件对jQuery程序设计的帮助:通过本文的介绍和示例,开发者可以了解到如何利用corner插件轻松实现圆角边框效果,这将有助于提升jQuery程序设计的效率和界面美观性。开发者在实际项目中,可以参考本文所述...

    jQuery插件-实现HTML5微信红包抽奖红包雨特效动画js效果.rar

    jQuery插件-实现HTML5微信红包抽奖红包雨特效动画js效果.rar jQuery插件-实现HTML5微信红包抽奖红包雨特效动画js效果.rar jQuery插件-实现HTML5微信红包抽奖红包雨特效动画js效果.rar jQuery插件-实现HTML5微信红包...

    兼容所有浏览器的 Jquery 圆角插件,可配置

    本文将详细介绍一个兼容所有浏览器的jQuery圆角插件的使用和实现原理。 **1. 插件介绍** 标题中的"兼容所有浏览器的jQuery圆角插件"指的是一个专门用于使HTML元素(如div)具有圆角效果的JavaScript插件。它利用...

    jquery插件库-3D框阴影着色.zip

    这个“jquery插件库-3D框阴影着色.zip”文件包含了一个专门针对jQuery的插件,该插件主要用于实现3D框阴影效果,为网页元素增添视觉深度和立体感。 首先,jQuery插件是一种扩展jQuery功能的方法,它们是封装好的...

    jquery插件库-jquery抽奖插件.zip

    jQuery抽奖插件通常是一段封装好的JavaScript代码,它利用jQuery的高效性能和丰富的API,为网页添加各种抽奖效果。这些效果包括但不限于旋转盘、弹珠机、刮刮乐等,旨在提供一种引人入胜的互动体验,增加用户参与度...

Global site tag (gtag.js) - Google Analytics