jQuery实现的立体文字渐变效果


Posted in Javascript onMay 17, 2010

先截两个图看看:

jQuery实现的立体文字渐变效果

jQuery实现的立体文字渐变效果

效果很不错吧?会不会误以为这些字体是图片?这可不是图片,而是用JS实现的

在线演示 http://demo.3water.com/js/gradient-test/demo.htm

下面来简单分享下实现过程及原理(网站中使用了jquery这个lib,我们这里就不再自己单独实现了,我们这里分享的也是jquery的实现方法):

HTML代码:

<span class="rainbows">© 2009 Dragon Interactive. All Rights Reserved.</span>

为了便于代码重用,我们通过class来标识出哪些文字需要增加这个特效,这里用的是rainbows。

CSS代码:

.rainbows{position:relative;display:block;} .rainbow { background: transparent; display: block; position: relative; height: 1px; overflow: hidden; z-index: 5; } .rainbow span { position: absolute; display: block; top: 0; left: 0px; } .rainbows .highlight { color: #fff; display:block; position: absolute; top: -2px; left: 0px; z-index: 4; } .rainbows .shadow { color: #000; display:block; position: absolute; opacity: 0.5; filter:alpha(opacity=50); top: 2px; left: 2px; z-index: 3; }.rainbows{position:relative;display:block;} 
.rainbow { 
background: transparent; 
display: block; 
position: relative; 
height: 1px; 
overflow: hidden; 
z-index: 5; 
} .rainbow span { 
position: absolute; 
display: block; 
top: 0; 
left: 0px; 
} 
.rainbows .highlight { 
color: #fff; 
display:block; 
position: absolute; 
top: -2px; 
left: 0px; 
z-index: 4; 
} 
.rainbows .shadow { 
color: #000; 
display:block; 
position: absolute; 
opacity: 0.5; 
filter:alpha(opacity=50); 
top: 2px; 
left: 2px; 
z-index: 3; 
}

这里主要说明下highlight和shadow这两个class的意义,其实从字面也基本可以理解,这两个class是为了增加字体的立体性而设定,一个是白色的高亮,一个是黑色阴影。

JS部分:

function initGradients(s) { $(function() { $(s).each(function() { var el = this; var from = $(el).attr('gradFromColor')||'#ffffff', to = $(el).attr('gradToColor')||'#000000'; var fR = parseInt(from.substring(1, 3), 16), fG = parseInt(from.substring(3, 5), 16), fB = parseInt(from.substring(5, 7), 16), tR = parseInt(to.substring(1, 3), 16), tG = parseInt(to.substring(3, 5), 16), tB = parseInt(to.substring(5, 7), 16); var h = $(this).height() * 1.5; var html,cacheHTML=[]; this.initHTML = html = this.initHTML||this.innerHTML; this.innerHTML = ''; for (var i = 0; i < h; i++) { var c = '#' + (Math.floor(fR * (h - i) / h + tR * (i / h))).toString(16) + (Math.floor(fG * (h - i) / h + tG * (i / h))).toString(16) + (Math.floor(fB * (h - i) / h + tB * (i / h))).toString(16); cacheHTML.push('<span class="rainbow rainbow-' + i + '" style="color: ' + c + ';"><span style="top: ' + ( - i - 1) + 'px;">' + html + '</span></span>') } cacheHTML.push('<span class="highlight">' + html + '</span>','<span class="shadow">' + html + '</span>'); $(cacheHTML.join('')).appendTo(this) }) }) } //这个部分就是调用了,传入要添加效果的元素,这里可以是jquery的任意选择符。 initGradients('.rainbows'); function initGradients(s) { 
$(function() { 
$(s).each(function() { 
var el = this; 
var from = $(el).attr('gradFromColor')||'#ffffff', to = $(el).attr('gradToColor')||'#000000'; 
var fR = parseInt(from.substring(1, 3), 16), 
fG = parseInt(from.substring(3, 5), 16), 
fB = parseInt(from.substring(5, 7), 16), 
tR = parseInt(to.substring(1, 3), 16), 
tG = parseInt(to.substring(3, 5), 16), 
tB = parseInt(to.substring(5, 7), 16); var h = $(this).height() * 1.5; 
var html,cacheHTML=[]; 
this.initHTML = html = this.initHTML||this.innerHTML; 
this.innerHTML = ''; 
for (var i = 0; i < h; i++) { 
var c = '#' + (Math.floor(fR * (h - i) / h + tR * (i / h))).toString(16) + (Math.floor(fG * (h - i) / h + tG * (i / h))).toString(16) + (Math.floor(fB * (h - i) / h + tB * (i / h))).toString(16); 
cacheHTML.push('<span class="rainbow rainbow-' + i + '" style="color: ' + c + ';"><span style="top: ' + ( - i - 1) + 'px;">' + html + '</span></span>') 
} 
cacheHTML.push('<span class="highlight">' + html + '</span>','<span class="shadow">' + html + '</span>'); 
$(cacheHTML.join('')).appendTo(this) 
}) 
}) 
} 
//这个部分就是调用了,传入要添加效果的元素,这里可以是jquery的任意选择符。 
initGradients('.rainbows');

代码看起来并不算多,但是如果想明白原理的话还是要认真的理解下这个代码的。

结合JS/CSS我们可以看出其大概的思路如下:

程序首先算出字体所在容器的高度N,然后清空容器内容,并添加N个span,每个span内容都为原容器的文字,每个span的颜色根据渐变色进行计算,而且其中的文字定位都相比之前一个span的文字向上偏移一个像素。CSS中可以看到,每个span的高度都为1。这样,我们就通过N各不同颜色的1px的span把字体“拼”出来了,然后加上“高光/阴影”就搞定。

基于jQuery的立体文字渐变效果

Javascript 相关文章推荐
HTTP状态代码以及定义(解释)
Feb 02 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
基于vuejs+webpack的日期选择插件
May 21 Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 Javascript
详解如何提升JSON.stringify()的性能
Jun 12 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
微信小程序返回箭头跳转到指定页面实例解析
Oct 08 Javascript
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
JavaScript Window窗口对象属性和使用方法
Jan 19 Javascript
JS实现按比例缩小图片宽高
Aug 24 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
jQuery实现的类flash菜单效果代码
May 17 #Javascript
Jquery Select操作方法集合脚本之家特别版
May 17 #Javascript
JQuery select标签操作代码段
May 16 #Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 #Javascript
Jquery 最近浏览过的商品的功能实现代码
May 14 #Javascript
WEB 浏览器兼容 推荐收藏
May 14 #Javascript
js 数值项目的格式化函数代码
May 14 #Javascript
You might like
利用PHP实现短域名互转
2013/07/05 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
搭建vue开发环境
2018/07/19 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Python进阶之递归函数的用法及其示例
2018/01/31 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Python autoescape标签用法解析
2020/01/17 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
趣味游戏活动方案
2014/02/07 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
高中军训感想300字
2014/03/04 职场文书
幼儿教师求职信
2014/05/24 职场文书
实验室标语
2014/06/21 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
外贸英文求职信范文
2015/03/19 职场文书
学校党支部承诺书
2015/04/30 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers