用JavaScript/JS制作仿“QQ秀”的虚拟形象

2016-02-19 17:32 7 1 收藏

下面图老师小编跟大家分享一个简单易学的用JavaScript/JS制作仿“QQ秀”的虚拟形象教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - Web开发 】

  不知大家有没有玩过QQ秀?玩过的话一定会想自己也做一个类似的功能。不过没有玩过也没关系,你可以看看下面的演示。用户可以在列出的图片中自由定制自己的形象,用在论坛社区、留言本等地方的形象显示可是个不错的主意哦!怎么样?心动了吧?那让我们看看这东西到底是怎么回事吧!

  查看演示效果

  实际上,左边形象预览的形象是由多幅图片一层一层拼成的,呵呵,了解Photoshop的层技术就很容易理解了。每层图片的大小一样,必要显示的地方都调整在特定范围,其他地方都是透明的。在换形象时,只要把相应层的图片替换掉就可以了。不难理解,演示中只有20幅用于拼凑形象的图片(原始的形象有4幅),却可以拼出54=625个形象!

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  我们用一个特定格式的字符串来记录用户的形象配置,也是根据该字符串来显示虚拟形象,该字符串暂且称为配置码。存取形象时,就存取该配置码即可。因为这十分简单,所以这里不讨论服务器端语言的操作。配置码的格式举个例子就容易明白,例如df210表示第一层图片名为df.gif,第二层名为2.gif,第三层名为1.gif,没有第四层。所以不要给图片起名为0.gif。

  下面我们看看虚拟形象具体是如何实现的。演示中用了四层拼凑一个形象(其际上您可以用更用层):第一层裤子,第二层上衣,第三层发型,第四层帽子。各层供选图片都放在各自的目录中,目录名分别为1、、2、3、4,即和层数相同。另外列表中的图片和拼凑形象的图片不相同,列表中的只是缩略图。大图1.gif对应的缩略图是1x.gif,依此类推。另外每个目录都有一个图片df.gif,是该层的默认原始图片。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  照此这安置好图片后,开始编写代码,为了便于理解,以下代码的顺序并不完全按照演示中的顺序:

!-- 在要显示形象预览的地方放置以下这句代码 --div id="bodyshow" style="border:1px solid #000000;padding:0;POSITION: relative; Left: 0px; TOP: 0px; HEIGHT: 226px; WIDTH: 140px;"/div !-- 这是提交表单,把代表用户形象的字符串赋到隐藏域 userequip 提交 --form name="equipform" method="post" action=""input name="userequip" type="hidden" value=""input name="saveequip" type="submit" value="保存形象" input name="toreequip" type="button" value="原始形象" onclick="shoiwit('dfdfdf0');return false;" /formscript language="JavaScript"!--var myequip="dfdfdf0"; //最初显示的配置码,可由服务器读取并输出。function shoiwit(equip){ //这个函数由配置码为参数,显示虚拟形象showlayers=equip.split(''); //以为分隔符,分配各层图片名到一个数组 showlayers[]str="";for(i=0;ishowlayers.length;i++){if(showlayers[i]!='0'&&showlayers[i]!=''){ //如果图片名为0或空值则该层不显示。str+="img src='equipment/"+(i+1)+"/"+showlayers[i]+".gif' style='padding:0;position:absolute;top:0;left:0;width:140;height:226;z-index:"+(i+1)+";'";}}//最后在最上一层覆盖一幅完全透明的图片,这样用户在上面右链另存为也只能保存这幅图了:str+="img src='equipment/blank.gif' style='padding:0;position:absolute;top:0;left:0;width:140;height:226;z-index:100;'";if(equipform.userequip) equipform.userequip.value=myequip=equip; //把配置码赋值到隐藏域中bodyshow.innerHTML=str; //显示各层图片。}//页面加载后先显示最初的虚拟形象:document.body.onload=new Function("shoiwit(myequip)");function dressit(layer,img){ //这个函数用于更换配置,参数为 层数,图片名showlayers=myequip.split('');newequip="";for(i=0;ishowlayers.length;i++){if(i+1==layer){if(img==showlayers[i]) newequip+="df"; //如果该层已是这幅图片,则恢复为原始图片else newequip+=img; //否则换为这幅图}else newequip+=showlayers[i]; //其他层图片不变if(i+1!=showlayers.length) newequip+="";}shoiwit(newequip); //显示最新配置}--/script!--以下是供选图片列表,点击一幅图则更改相应的层的这幅图片注意链接路径,javascript:dressit(4,1) 表示第4层换上/脱下图片"1.gif",依此类推;不过要注意若要第4层换上/脱下图片df.gif,则应加引号,写成 javascript:dressit(4,'df')--table border="0" cellspacing="0" cellpadding="0"trtd width="84"a href="javascript:dressit(4,1)"img src="equipment/4/1x.gif" width="84" height="84" border="0"/a/tdtd width="84"a href="javascript:dressit(4,2)"img src="equipment/4/2x.gif" width="84" height="84" border="0"/a/tdtd width="84"a href="javascript:dressit(4,3)"img src="equipment/4/3x.gif" width="84" height="84" border="0"/a/tdtd width="84"a href="javascript:dressit(4,4)"img src="equipment/4/4x.gif" width="84" height="84" border="0"/a/td/trtrtda href="javascript:dressit(3,1)"img src="equipment/3/1x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(3,2)"img src="equipment/3/2x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(3,3)"img src="equipment/3/3x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(3,4)"img src="equipment/3/4x.gif" width="84" height="84" border="0"/a/td/trtrtda href="javascript:dressit(2,1)"img src="equipment/2/1x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(2,2)"img src="equipment/2/2x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(2,3)"img src="equipment/2/3x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(2,4)"img src="equipment/2/4x.gif" width="84" height="84" border="0"/a/td/trtrtda href="javascript:dressit(1,1)"img src="equipment/1/1x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(1,2)"img src="equipment/1/2x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(1,3)"img src="equipment/1/3x.gif" width="84" height="84" border="0"/a/tdtda href="javascript:dressit(1,4)"img src="equipment/1/4x.gif" width="84" height="84" border="0"/a/td/tr/table

  点击保存形象将向服务器提交配置码变量userequip,可用服务器端语言进行处理。要在其他地方显示该形象,则可根据注释选取上面代码中的部分代码就行了。

  有兴趣的朋友可点击这里(注:将example.htm和equipment打包供下载,因为读者看不到图片放置格式)下载演示的源文件及图片。

来源:http://www.tulaoshi.com/n/20160219/1615469.html

延伸阅读
标签: Web开发
基本原理分析 Windows关机效果分析 使用Windows系统的用户在关机的时候,出现的界面只允许用户选择关机、注销或取消动作,而桌面上的程序都不能使用,并且屏幕呈现灰色状态。 本例将仿照这种高亮显示的效果在网页上实现. 在网页上运用这种关机效果有什么好处呢?首先,由于单击某一链接后,将用户此时不可用的操作隐藏在后台,将可用的操作...
标签: Web开发
我们在制作定购单时,往往要计算客户定购物品的货款,HTML并没有提供这种在线计算的功能,但我们用Javascript程序可以实现这种在线汇总计算的功能。当然一个完整的定货单可能涉及许多表单标记,如何获取各表单标记的value值是解决问题的关键。本例的方法将告诉你如何去获得各表单元素的value值,并加以计算。你看下面这张定货单,它虽涉及...
标签: Web开发
以下是我们所制作的跑马灯效果的源程序 <html <head <script language="JavaScript" <!-- Hide var scrtxt="这儿的讯息可以改为你要告诉别人的话 "+" 或是注意事项 ..."; var lentxt=scrtxt.length; var width=100; var pos=1-width; function scroll() { pos++; var scroller=""; if (pos==lentxt) { p...
标签: Web开发
数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象 Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1 定义数组 声明有10个元素的数组 var a = new Array(10); 此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] ...
标签: Web开发
我们在制作调查表时,往往要限制用户的选择复选框的数量,如象本例中要求用户在九个网站中选择三个(见下图)认为最好的网站,这就要求用户选择的网站数不能大于3个,当然可以在后台通过程序来控制,但那样又慢又繁,用Javascript程序在用户端直接控制既快速又方便,在本例的效果中,一旦选择的网站数超过3个,将立即弹出一个提示窗口,告...

经验教程

76

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部