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,超强推荐base.js
Dec 23 Javascript
dojo 之基础篇(二)之从服务器读取数据
Mar 24 Javascript
jQuery.buildFragment使用方法及思路分析
Jan 07 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
jQuery制作可自定义大小的拼图游戏
Mar 30 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
May 03 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
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中文分词的简单实现代码分享
2011/07/17 PHP
基于php缓存的详解
2013/05/15 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
json的使用小结
2016/06/08 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
python函数装饰器用法实例详解
2015/06/04 Python
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
护士实习自我鉴定
2013/10/22 职场文书
班级入场式解说词
2014/02/01 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python