自写的一个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 迁移目录
Dec 18 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
js window对象属性和方法相关资料整理
Nov 11 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
animate.css在vue项目中的使用教程
Aug 05 Javascript
详解Vue中使用Axios拦截器
Apr 22 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 17 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
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实现一维数组转二维数组的方法
2015/02/25 PHP
PHP扩展开发入门教程
2015/02/26 PHP
php两种无限分类方法实例
2015/04/21 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
Javascript的闭包
2009/12/31 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
jQuery使用方法
2017/02/04 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
js实现导航跟随效果
2018/11/17 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
pygame实现飞机大战
2020/03/11 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
C#面试题问题集
2016/04/02 面试题
海南地接欢迎词
2014/01/14 职场文书
迎新生欢迎词
2015/01/23 职场文书
检讨书范文300字
2015/01/28 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server