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 相关文章推荐
jQuery ui 1.7更新小结
Aug 15 Javascript
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 Javascript
新入门node.js必须要知道的概念(必看篇)
Aug 10 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
Mar 20 jQuery
区别JavaScript函数声明与变量声明
Sep 12 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
php生成无限栏目树
2017/03/16 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
js实现秒表计时器
2019/12/16 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
岗位廉政承诺书
2014/03/27 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python