jQuery与js实现颜色渐变的方法


Posted in Javascript onDecember 30, 2016

本文实例讲述了jQuery与js实现颜色渐变的方法。分享给大家供大家参考,具体如下:

1.目的

本来想的是 提示用户应该点某个按钮 这个功能,就想着让这个按钮div的边框变成醒目的颜色然后逐渐变白。

在网上搜了搜,本来想使用jQuery的animate,后来发现这个方法只能用来进行长度的渐变。还有就是需要下载jQuery的颜色渐变插件来实现,感觉挺麻烦的,就自己用土办法实现了。

2.原理

先获得初始颜色的rgb,再获得终止颜色的rgb,使用rgb三个数字的差值,从初始颜色的rgb逐渐过渡到终止颜色的rgb。

3.代码

获得颜色rgb的代码如下:

//将输入的颜色字符串转换成十进制数组
function getData(color) {
  var re = RegExp;
  if (/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.test(color)) {
    //#rrggbb
    return [parseInt(re.$1,16),parseInt(re.$2,16),parseInt(re.$3,16)];
  } else if (/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(color)) {
    //#rgb
    return [parseInt(re.$1+re.$1,16),parseInt(re.$2+re.$2,16),parseInt(re.$3+re.$3,16)];
  } else if (/^rgb(.*),(.*),(.*)$/i.test(color)) {
    //rgb(n,n,n) or rgb(n%,n%,n%)
    if(re.$1.indexOf("%")>-1){
      return [parseInt(parseFloat(re.$1, 10) * 2.55),
          parseInt(parseFloat(re.$2, 10) * 2.55),
          parseInt(parseFloat(re.$3, 10) * 2.55)];
    }else{
       return [parseInt(re.$1),parseInt(re.$2),parseInt(re.$3)];
    }
  }
}

方法中没有队color的验证之类的方法,见谅。传入的参数color格式可以是:"#1ba3e1"、"#f0e"、"rgb(200,50,100)"、"rgb(20%,80%,50%)"这四种格式。返回的是rgb三个数值组成的数组。

然后进行颜色的渐变:

(function($){$.fn.shade = function(prop,color1,color2,mills){
  var count = mills/200;
  var data1 = getData(color1);
  var data2 = getData(color2);
  var red = data1[0],green = data1[1],blue = data1[2];
  var r = (data2[0]-data1[0])/count,g = (data2[1]-data1[1])/count,b = (data2[2]-data1[2])/count;
  obj_temp = $(this);
  for(var i=1;i<count+1;i++){
    setTimeout("$(obj_temp).css('"+prop+"','rgb("+parseInt(red+r*i+0.5)+","+
        parseInt(green+g*i+0.5)+","+parseInt(blue+b*i+0.5)+")');", i*200);
  }
}})(jQuery);

这里我在jQuery中定义了一个shade函数,参数:对象渐变的属性(如border-color)、起始颜色、终止颜色、变色所需时间。我规定了200ms进行一次变色(可以自行调整),使用setTimeout函数每200ms执行一次变化。(我起初想使用while()或者递归来实现每隔一段时间执行一次变化,但js中的线程不像java中用Thread.sleep()就可以等待,所以不得不先将要运行的变色代码全部扔到setTimeout中,等待依次执行。)

代码中使用

$("#more").shade("border-color","#1ba3e1","#fff",2000);

就可以实现了。

注:运行此函数需要定义一个obj_temp的全局变量。

如果运行出现BUG自行调试。。。Thanks for watching.

Javascript 相关文章推荐
js简单实现用户注册信息的校验代码
Nov 15 Javascript
javascript判断office版本示例
Apr 11 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
bootstrap模态框垂直居中效果
Dec 03 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
js 判断当前时间是否处于某个一个时间段内
Sep 19 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 #Javascript
ajax图片上传,图片异步上传,更新实例
Dec 30 #Javascript
浅谈JavaScript的函数及作用域
Dec 30 #Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 #Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 #Javascript
浅谈js script标签中的预解析
Dec 30 #Javascript
jQuery实现页面顶部下拉广告
Dec 30 #Javascript
You might like
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
js保留两位小数使用toFixed实现
2013/07/29 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
jQuery实现本地存储
2020/12/22 jQuery
Python入门_浅谈for循环、while循环
2017/05/16 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
python绘制随机网络图形示例
2019/11/21 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python实现用户名密码校验
2020/03/18 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
opencv实现图像几何变换
2021/03/24 Python
外语系毕业生自荐信范文
2013/12/16 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
男方婚前保证书
2015/02/28 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL