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模拟多线程
Feb 07 Javascript
javascript dom 基本操作小结
Apr 11 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
详解react-redux插件入门
Apr 19 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
May 06 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 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
Terran剧情介绍
2020/03/14 星际争霸
动易数据转成dedecms的php程序
2007/04/07 PHP
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
加速IE的Javascript document输出的方法
2010/12/02 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
高中毕业自我评价
2014/02/08 职场文书
物理力学求职信
2014/02/18 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
中学生操行评语大全
2014/04/24 职场文书
求职信的正确写法
2014/07/10 职场文书
学校德育工作总结2015
2015/05/11 职场文书
工程移交协议书
2016/03/24 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL