自写的一个jQuery圆角插件


Posted in Javascript onOctober 26, 2010

原理是利用1px的div,具体实现看代码。
使用方法:

$('.test').rounder();

这样会根据默认的设置产生一个圆角框,效果如图:自写的一个jQuery圆角插件

圆角处会有点锯齿:(
如果仅此而已,那肯定是不够的。我们会想加上自己的一个样式该怎么办?使用方法:

$('.test').rounder({borderColor:'red',backgroundColor:'#EEE',color:'blue'});

效果如图:自写的一个jQuery圆角插件

接下来我就来讲讲实现过程了,先附上jQuery代码如下:

(function($){ 
$.fn.rounder=function(options){ 
var setting=$.extend({backgroundColor:'#FFF',borderColor:'#AAA',color:'#000'},options||{}); 
this.each(function(){ 
var source=$(this); 
var container=source.parents(".mapping_rounder"); 
if(container.size()<=0){ 
container=$('<div class="mapping_rounder"></div>'); 
source.before(container); 
//添加1pxDIV 
container.append('<div class="rounder_px3"></div><div class="rounder_px2"></div><div class="rounder_px1"></div><div class="rounder_px0"></div><div class="rounder_content"></div><div class="rounder_px0"></div><div class="rounder_px1"></div><div class="rounder_px2"></div><div class="rounder_px3"></div>'); 
container.find('.rounder_content').append(source); 
//保持原有的形态,如:高度、宽度等 
container.width(source.width()); 
source.width(source.width()-12); 
container.height(source.height()); 
source.height(source.height()-8); 
source.css('lineHeight',source.height()+'px'); 
container.css('marginTop',source.css('marginTop')); 
source.css('marginTop',0); 
container.css('marginBottom',source.css('marginBottom')); 
source.css('marginBottom',0); 
container.css('marginLeft',source.css('marginLeft')); 
source.css('marginLeft',0); 
container.css('marginRight',source.css('marginRight')); 
source.css('marginRight',0); 
} 
//给1pxDIV添加样式以产生圆角边框的效果 
container.find('.rounder_px3').css('backgroundColor',setting.borderColor); 
container.find('.rounder_px2').css({borderColor:setting.borderColor,backgroundColor:setting.backgroundColor}); 
container.find('.rounder_px1').css({borderColor:setting.borderColor,backgroundColor:setting.backgroundColor}); 
container.find('.rounder_px0').css({borderColor:setting.borderColor,backgroundColor:setting.backgroundColor}); 
container.find('.rounder_content').css({borderColor:setting.borderColor,backgroundColor:setting.backgroundColor}); 
//去除原有的样式 
source.css('borderStyle','none'); 
source.css('backgroundColor',setting.backgroundColor); 
source.css('color',setting.color); 
}); 
} 
})(jQuery);

CSS文件代码:
.rounder_content{padding:0 5px;border-left:1px solid;border-right:1px solid;} 
.rounder_px0{margin:0;height:2px;border-left:2px solid;border-right:2px solid;overflow:hidden;} 
.rounder_px1{margin:0 1px;height:1px;border-left:2px solid;border-right:2px solid;overflow:hidden;} 
.rounder_px2{margin:0 2px;height:1px;border-left:3px solid;border-right:3px solid;overflow: hidden;} 
.rounder_px3{margin:0 3px;height:1px;background:#AAA;overflow:hidden;}

本来这个CSS文件的样式都可以用jQuery加上去,但那样会多很多代码,且让我在此偷下懒- -|||。样式里面加上overflow:hidden;的目的是为了兼容IE6,因为在IE6里面DIV会有个默认的最小高度,好像是13px。
功能非常简单,但可以应用到我们常见的应用中,如下:
<script type="text/javascript"> 
$(document).ready(function(){ 
$('.test').rounder({borderColor:'#AAA',color:'#000'}); 
$('.test').focus(function(event){$(event.target).rounder({borderColor:'red',backgroundColor:'#EEE',color:'blue'});}); 
$('.test').blur(function(event){$(event.target).rounder({borderColor:'#AAA',color:'#000'});}); 
}); 
</script>

即文本框加上圆角,获取焦点时呈现一种样式,失去焦点时再呈现另一种样式。

当然,我们可以通过和jQuery本身强大的功能结合来满足不同的需求。

优点:

体积小,两个文件经过压缩后只有2.23kb
简单易用
不足:

边框弧度和线条的粗细不能调节(如果需要请参考jquery.corner插件)
高度和字符大小配合的不是很好,有时字符会被遮住一半
测试通过IE6、FF、Opera、Safari、Chrome

Javascript 相关文章推荐
js Date自定义函数 延迟脚本执行
Mar 10 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
Sep 19 Javascript
探究JavaScript函数式编程的乐趣
Dec 14 Javascript
如何通过js实现图片预览功能【附实例代码】
Mar 30 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 Javascript
JavaScript文档加载模式以及元素获取
Jul 28 Javascript
jQuery获取地址栏参数插件(模仿C#)
Oct 26 #Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 #Javascript
jquery ui resizable bug解决方法
Oct 26 #Javascript
HTML Dom与Css控制方法
Oct 25 #Javascript
Dom在ajax技术中的作用说明
Oct 25 #Javascript
Dom与浏览器兼容性说明
Oct 25 #Javascript
Dom 是什么的详细说明
Oct 25 #Javascript
You might like
简单的页面缓冲技术
2006/10/09 PHP
php实现jQuery扩展函数
2009/10/30 PHP
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
夜大自我鉴定
2013/10/31 职场文书
教师一帮一活动总结
2014/07/08 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
初中思想品德教学反思
2016/02/24 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL