JavaScript实现的鼠标响应颜色渐变效果完整实例

发布时间 - 2026-01-10 23:08:19    点击率:

本文实例讲述了JavaScript实现的鼠标响应颜色渐变效果。分享给大家供大家参考,具体如下:

运行效果图如下:

完整代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>颜色渐变实例</title>
<script type="text/javascript">
//--------------------------------------------------------------------
//基础类库:
//1.获取对象:
function $(id){
  return typeof id=='string'?document.getElementById(id):id;
  }
//2.添加事件监听:
function addEventHandler(oTarget,sEventType,fnHandler){
    if(oTarget.addEventListener){
        oTarget.addEventListener(sEventType,fnHandler,false);
      }else if(oTarget.attachEvent){
        oTarget.attachEvent("on"+sEventType,fnHandler);
      }else{
        oTarget["on"+sEventType]=fnHandler;
      }
  }
//3.自定"义产生对象"类:
var Class={
    Create:function(){
        return function(){
            this.initialize.apply(this,arguments);
          }
      }
  }
//4.对象属性合并:
Object.extend=function(destination,source){
    for(var property in source){
      destination[property]=source[property];
    }
    return destination;
  }
//--------------------------------------------------------------------
var colorFade=Class.Create();
colorFade.prototype={
    //1.类的初始化:
    initialize:function(obj,options){
        this._obj=$(obj);//当前要改变颜色的对象。
        this._timer=null;//计时器。
        this.SetOptions(options);//传入的数组参数。
        this.Steps=Math.abs(this.options.Steps);
        this.Speed=Math.abs(this.options.Speed);
        //this._colorArr:用来寄存当前颜色的r.g.b信息。
        this.StartColorArr=this._colorArr=this.getColorArr(this.options.StartColor);
        this.EndColorArr=this.getColorArr(this.options.EndColor);
        this.Background=this.options.Background;
        //从开始到结束,r.g.b三种原色渐变的梯度值(即,每次渐变要增加/减少的值)。
        this._stepAddValueArr=[this.getColorAddValue(this.StartColorArr[0],this.EndColorArr[0]),this.getColorAddValue(this.StartColorArr[1],this.EndColorArr[1]),this.getColorAddValue(this.StartColorArr[2],this.EndColorArr[2])];
        //设置对象颜色:
        this._setObjColor=this.Background?function(sColor){
            this._obj.style.backgroundColor=sColor;
          }:function(sColor){
            this._obj.style.color=sColor;
          };
        this._setObjColor(this.options.StartColor);
        //为对象添加事件:
        var oThis=this;
        addEventHandler(this._obj,"mouseover",
          function(){
              oThis.Fade(oThis.EndColorArr);
            }
        );
        addEventHandler(this._obj,"mouseout",function(){
            oThis.Fade(oThis.StartColorArr);
          });
      },
    /*
      2.对象属性初始化:
    */
    SetOptions:function(options){
        this.options={
          StartColor:  "#000000",
          EndColor:  "#ffffff",
          Steps:    20,//渐变次数
          Speed:    20,//渐变速度,即每隔多少(Speed)毫秒渐变一次。
          Background: true//是否为对象背景渐变。
        }
        //合并属性:
        Object.extend(this.options,options||{});
      },
    /*
      3.得到某个颜色的"r.g.b"信息数组:
      sColor:被计算的颜色值,格式为"#ccc000"。
      返回的一个数组。
    */
    getColorArr:function(sColor){
        var curColor=sColor.replace("#","");
        var r,g,b;
        if(curColor.length>3){//六位值
          r=curColor.substr(0,2);
          g=curColor.substr(2,2);
          b=curColor.substr(4,2);
        }else{
          r=curColor.substr(0,1);
          g=curColor.substr(1,1);
          b=curColor.substr(2,1);
          r+=r;
          g+=g;
          b+=b;
        }
        //返回“十六进制”数据的“十进制”值:
        return [parseInt(r,16),parseInt(g,16),parseInt(b,16)];
      },
    /*
      4.得到当前原色值(r.g.b)渐变的梯度值。
      sRGB:开始颜色值(十进制)
      eRGB:结束的颜色值(十进制)
    */
    getColorAddValue:function(sRGB,eRGB){
      var stepValue=Math.abs((eRGB-sRGB)/this.Steps);
      if(stepValue>0&&stepValue<1){
        stepValue=1;
      }
      return parseInt(stepValue);
    },
    /*
      5.得到当前渐变颜色的"r.g.b"信息数组。
      startColor:开始的颜色,格式为"#ccc000";
      iStep:当前渐变的级数(即当前渐变的次数)。
      返回颜色值,如 #fff000。
    */
    getStepColor:function(sColor,eColor,addValue){
         if(sColor==eColor){
          return sColor;
        }else if(sColor<eColor){
          return (sColor+addValue)>eColor?eColor:(sColor+addValue);
        }else if(sColor>eColor){
          return (sColor-addValue)<eColor?eColor:(sColor-addValue);
        }
      },
    /*
      6.开始渐变:
      endColorArr:目标颜色,为r.g.b信息数组。
    */
    Fade:function(endColorArr){
         clearTimeout(this._timer);
        var er=endColorArr[0],
        eg=endColorArr[1],
        eb=endColorArr[2],
        r=this.getStepColor(this._colorArr[0],er,this._stepAddValueArr[0]),
        g=this.getStepColor(this._colorArr[1],eg,this._stepAddValueArr[1]),
        b=this.getStepColor(this._colorArr[2],eb,this._stepAddValueArr[2]);
        this._colorArr=[r,g,b];
        this._setObjColor("#"+Hex(r) + Hex(g) + Hex(b));
        if(r!=er||g!=eg||b!=eb){
          var oThis=this;
          oThis._timer=setTimeout(function(){oThis.Fade(endColorArr)},oThis.Speed);
        }
      }
  }
//返回16进制数
function Hex(i) {
  if (i < 0) return "00";
  else if (i > 255) return "ff";
  else {
    //十进制 转成 十六进制:
    var str = "0" + i.toString(16);
    return str.substring(str.length - 2);
  }
}
</script>
</head>
<body>
<div id="test" style="height:40px;width:200px;border:1px solid red;">
  嘻嘻!
</div>
<div id="test1" style="height:40px;width:200px;border:1px solid red;">
  呵呵!
</div>
<div id="test2" style="height:40px;width:200px;border:1px solid red;">
  哈哈!
</div>
</body>
<script type="text/javascript">
var colorFade01=new colorFade("test",{StartColor:'#000000',EndColor:'#8AD4FF',Background:true});
var colorFade02=new colorFade("test",{StartColor:'#8AD4FF',EndColor:'#000000',Background:false});
var colorFade03=new colorFade("test1",{StartColor:'#000000',EndColor:'#8AD4FF',Background:true});
var colorFade04=new colorFade("test1",{StartColor:'#8AD4FF',EndColor:'#000000',Background:false});
var colorFade05=new colorFade("test2",{StartColor:'#000000',EndColor:'#8AD4FF',Background:true});
var colorFade06=new colorFade("test2",{StartColor:'#8AD4FF',EndColor:'#000000',Background:false});
</script>
</html>

PS:这里再为大家推荐几款网页元素样式相关工具供大家参考使用:

在线特效文字/彩色文字生成工具:
http://tools./aideddesign/colortext

Firefox的Linear Gradients (线性渐变)在线调试工具:
http://tools./aideddesign/moz_LinearGradients

webkit内核safari/Chrome的Linear Gradients(线性渐变)在线调试工具
http://tools./aideddesign/webkit_LinearGradients

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript事件相关操作与技巧大全》、《JavaScript切换特效与技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JavaScript  # 鼠标响应  # 颜色渐变  # JS实现鼠标滑过链接改变网页背景颜色的方法  # 鼠标选择动态改变网页背景颜色的JS代码  # JS实现文字链接感应鼠标淡入淡出改变颜色的方法  # js随机颜色代码的多种实现方式  # JS实现随机颜色的3种方法与颜色格式的转化  # js获取随机颜色值的函数  # javascript生成随机颜色示例代码  # JavaScript随机生成颜色的方法  # js实现点击按钮后给Div图层设置随机背景颜色的方法  # JavaScript实现鼠标移入随机变换颜色  # 格式为  # 调试工具  # 相关内容  # 鼠标  # 计时器  # 数据结构  # 给大家  # 三种  # 更多关于  # 每隔  # 所述  # 几款  # 程序设计  # 转成  # 面向对象  # 自定  # 六位  # 再为  # 类库  # 嘻嘻 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel怎么上传文件_Laravel图片上传及存储配置  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  JavaScript常见的五种数组去重的方式  canvas 画布在主流浏览器中的尺寸限制详细介绍  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel如何实现多对多模型关联?(Eloquent教程)  详解Oracle修改字段类型方法总结  详解vue.js组件化开发实践  Laravel怎么判断请求类型_Laravel Request isMethod用法  ,交易猫的商品怎么发布到网站上去?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Android 常见的图片加载框架详细介绍  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  如何在建站宝盒中设置产品搜索功能?  如何在IIS服务器上快速部署高效网站?  如何用AWS免费套餐快速搭建高效网站?  Python文件异常处理策略_健壮性说明【指导】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  千库网官网入口推荐 千库网设计创意平台入口  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何用PHP快速搭建CMS系统?  历史网站制作软件,华为如何找回被删除的网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  EditPlus中的正则表达式实战(6)  高防服务器租用如何选择配置与防御等级?  Python并发异常传播_错误处理解析【教程】  如何在VPS电脑上快速搭建网站?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Android利用动画实现背景逐渐变暗  网站图片在线制作软件,怎么在图片上做链接?  北京的网站制作公司有哪些,哪个视频网站最好?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】