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 相关文章推荐
Mootools 1.2教程(2) DOM选择器
Sep 14 Javascript
向左滚动文字 js代码效果
Aug 17 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
js+html5实现复制文字按钮
Jul 15 Javascript
cdn模式下vue的基本用法详解
Oct 07 Javascript
javascript匿名函数中的'return function()'作用
Oct 15 Javascript
BootstrapValidator实现表单验证功能
Nov 08 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
详解JavaScript自定义函数
Jul 29 Javascript
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 和 COM
2006/10/09 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
个人素质的自我评价分享
2013/12/16 职场文书
争先创优心得体会
2014/09/12 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
远程教育培训心得体会
2016/01/09 职场文书
分享几种python 变量合并方法
2022/03/20 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python