自写的一个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 相关文章推荐
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 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
PHP 反射(Reflection)使用实例
2015/05/12 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
Python set集合类型操作总结
2014/11/07 Python
Python中常见的数据类型小结
2015/08/29 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Python打印不合法的文件名
2020/07/31 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
法学毕业生自荐信
2013/11/13 职场文书
实习生自我鉴定范文
2013/12/05 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
培训班通知
2015/04/25 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
python数字图像处理:图像简单滤波
2022/06/28 Python