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的倒计时实现代码
May 30 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
vue中的inject学习教程
Apr 24 Javascript
用node.js写一个jenkins发版脚本
May 21 Javascript
vue路由权限校验功能的实现代码
Jun 07 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
php数组删除元素示例
2014/03/21 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Python中decorator使用实例
2015/04/14 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python格式化输出%s和%d
2018/05/07 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
python实现在线翻译
2020/06/18 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
三好学生竞选稿
2015/11/21 职场文书
新学期开学寄语2016
2015/12/04 职场文书