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 27 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 Javascript
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
第七节--类的静态成员
2006/11/16 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python访问sqlserver示例
2014/02/10 Python
Python变量作用范围实例分析
2015/07/07 Python
python多进程共享变量
2016/04/06 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
机修工岗位职责
2013/11/24 职场文书
入党申请自荐书范文
2014/02/11 职场文书
大学校务公开实施方案
2014/03/31 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
入党介绍人考察意见
2015/06/01 职场文书
手写实现JS中的new
2021/11/07 Javascript
python pygame 开发五子棋双人对弈
2022/05/02 Python