自写的一个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 用原型继承来实现对象系统
Mar 22 Javascript
上传的js验证(图片/文件的扩展名)
Apr 25 Javascript
javascript每日必学之基础入门
Feb 16 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
jQuery事件多次绑定与解绑问题实例分析
Feb 19 jQuery
Vue3.0结合bootstrap创建多页面应用
May 28 Javascript
前端性能优化建议
Sep 17 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扩展ZF――Validate扩展
2008/01/10 PHP
php不用正则采集速度探究总结
2008/03/24 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
python del()函数用法
2013/03/24 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python基础知识小结之集合
2015/11/25 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
python3 字符串知识点学习笔记
2020/02/08 Python
如何利用python进行时间序列分析
2020/08/04 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
小班下学期评语
2014/05/04 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js