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 相关文章推荐
javascript据option的value值快速设定初始的selected选项
Aug 13 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
jQuery TextBox自动完成条
Jul 22 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
关于JQuery($.load)事件的用法和分析
Apr 09 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
JS实现简单打字测试
Jun 24 Javascript
vue3中provide && inject的使用
Jul 01 Vue.js
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写MySQL数据 实现代码
2009/06/15 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
python 编程之twisted详解及简单实例
2017/01/28 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
python 等差数列末项计算方式
2020/05/03 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
物流仓储计划书
2014/01/10 职场文书
村官学习十八大感想
2014/01/15 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
区域销售大会开幕词
2016/03/04 职场文书