Raphael.js绘制气泡墙

这是我为一家公司做的移动端气泡墙,跟大家分享下代码。

<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="inital-scale=1.0" />
<title>JS实现气泡从水中急速上升效果</title>
<script type="text/javascript" src="js/pagesize.640.js" ></script>
<script type="text/javascript" src="js/jquery.js" ></script>
<script type="text/javascript" src="js/raphael.js" ></script>
<style type="text/css">
body
{
	640px;
	height:1010px;
}
#content
{
	background:url("images/bg.jpg");
	640px;
	height:100%;
}
body
{
    margin:0px;
    padding:0px;
}
#footer
{
	640px;
	bottom:0;left:0; 
	background:rgb(12,3,4);
	height:10%;
	text-align: center;
}

</style>

<script type="text/javascript">

var jsonData = 
{"message":
	[
		{"content":"我很不爽ssssssssssssssssssss"},
		{"content":"我很不爽sssssssssssssssssssssssssssssss1"},
		{"content":"我很不爽ssssssssssssssssssss2"},
		{"content":"我很不sssssssssssss爽3"},
		{"content":"我很不sssssssssssssss爽4"},
		{"content":"xxsssssssssssssssssssssssx5"},
		{"content":"xxx6"},
		{"content":"OOXXXXOO无所谓"},
		{"content":"xxssssssssssssx"},
		{"content":"xxx1ssssssssssssss"},
		{"content":"xxx2"},
		{"content":"xxsssssssssssssssssx3"},
		{"content":"xxsssssssssssssx4"},
		{"content":"xxsssssssssssssx5"},
		{"content":"xxx6"},
		{"content":"xxx"},
		{"content":"xxx1"},
		{"content":"xxx2"},
		{"content":"xxx3"},
		{"content":"xxx4"},
		{"content":"xxx5"},
		{"content":"xxx6"},
		{"content":"xxx"},
		{"content":"xxx1"},
		{"content":"xxx2"},
		{"content":"xxx3"},
		{"content":"xxx4"},
		{"content":"xxx5"},
		{"content":"xxx6"},
	]	
}
var start_y = 1010;
var start_x = 10;
var start_height = 550;
var paper;
var last;
var left_set_array = new Array(2,100,250,330);
var paper1 = false;
//初始化画布
$(function()
{
	paper = Raphael(0,0,640,1010,"content");
	drawImage();
	var href = paper.image("images/tantan.png",170,900,300,110);
	href.click(function()
	{
	
	})
})
//返回随机数与数组结合定义x轴坐标
function getOfferSet()
{
	return parseInt(4*Math.random());	
}
//动画回调事件
var reload = function()
{
	if(this.id == last)
	{
		drawImage();
	}
	this.remove();
}
var last_time = 10000;
//绘制气泡和文字添加动画事件
function drawImage()
{
	start_height = 550;
	var time = 0;
	for(var i = 0;i<jsonData.message.length;i++)
	{
		var info = jsonData.message[i].content;
		var text_info = getImageWidth(jsonData.message[i].content);//文本内容
		var width = 300;
		var x = left_set_array[getOfferSet()];
		var stop_x = left_set_array[getOfferSet()];
		var image = paper.image("images/pao.png",x,start_height,width,width);
		var text = paper.text(x+image.attr("width")/2,start_height+image.attr("width")/2+5,text_info);
		text.attr({"font-familly":"Microsoft YaHei","stroke":"rgb(252,255,219)","stroke-width":"2","font-size":"30px"});
		image.text = jsonData.message[i].content;
		//点击查看详情信息
		image.click(function()
		{
			showInfo(this.text);
		})
		//图片和文字动画效果
		image.animate({x:stop_x,y:0},last_time+2000*i,{opacity:0.5},reload);
		text.animate({x:stop_x+image.attr("width")/2,y:0+image.attr("width")/2-5},last_time+2000*i,{opacity:0.5},reload);
		if(i==parseInt(jsonData.message.length-2))
		{
			last = image.id;
		}
		start_height = start_height + width*2;
	}
		
}
//根据文字长度定义气泡大小
function getImageWidth(content)
{
	var length = content.length;
	var content_array = content.split("");
	
	var content_info = "";
	for(var i = 0;i<7;i++)
	{
		if(content_array[i]!=null)
		{
			content_info += content_array[i];
		}
	}
	//超出7个字加省略号
	if(length>7)
	{
		return content_info+"...";
	}
	else
	{
		return content_info;
	}
}
var rect_id = "off";
var t_id = false;
//显示上内容条具体信息
function showInfo(text)
{
	if("off"!=rect_id)
	{
		var re = paper.getById(rect_id);
		re.remove();
		var tt = paper.getById(t_id);
		tt.remove();
		var rect = paper.rect(0,0,640,100).attr({"fill":"block","opacity":0.4});
		var text = paper.text(320,50,text).attr({"stroke":"white","font-size":"32px","font-familly":"Microsoft YaHei"});
		rect_id = rect.id;
		t_id = text.id;
		rect.animate({x:0,y:0},2000,{"opacity":0.1},callback);
		text.animate({x:320,y:50},2000,{"opacity":0.1},callback);
	}
	else
	{
		var rect = paper.rect(0,0,640,100).attr({"fill":"block","opacity":0.4});
		var text = paper.text(320,50,text).attr({"stroke":"white","font-size":"32px","font-familly":"Microsoft YaHei"});
		rect_id = rect.id;
		t_id = text.id;
		rect.animate({x:0,y:0},2000,{"opacity":0.1},callback);
		text.animate({x:320,y:50},2000,{"opacity":0.1},callback);
	}
	
}
//上方内容动画回调函数
function callback()
{
	rect_id = "off";
	t_id = false;
	this.remove();	
}




</script>
</head>
<body>

<div id="content" ></div>



</body>
</html>

代码免费下载地址:https://github.com/medivhQ/bubble

本来想上传到CSDN上,可惜晚上资源站崩溃了。

http://download.csdn.net/detail/wow4464/7937213(补上)

效果图如下:


原文地址:https://www.cnblogs.com/MedivhQ/p/4074919.html