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 时间显示效果代码
Aug 23 Javascript
js 弹出框 替代浏览器的弹出框
Oct 29 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
js实现有时间限制消失的图片方法
Feb 27 Javascript
javascript中递归函数用法注意点
Jul 30 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
解决layer弹出层自适应页面大小的问题
Sep 16 Javascript
js实现文章目录索引导航(table of content)
May 10 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 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
如何给phpadmin一个保护
2006/10/09 PHP
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
php开发工具之vs2005图解
2008/01/12 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
html读出文本文件内容
2007/01/22 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
浅谈vue加载优化策略
2019/03/19 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
js实现秒表计时器
2019/12/16 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
用python制作个视频下载器
2021/02/01 Python
如何选择使用结构还是类
2014/05/30 面试题
乡镇庆八一活动方案
2014/02/02 职场文书
签约仪式主持词
2014/03/19 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android