Raphael.js绘制循环动画
2014-12-11 11:58
369 查看
今天有人叫我帮看了一个程序;
需要实现的是点击按钮,椭圆线段的一段移动到另外一端;椭圆所关联的另一条线段路径也随之改变;再次点击按钮,效果反之;
不多说了两种代码;
第一种是我做的;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Raphael</title>
<script src="../js/jquery.js"></script>
<script src="../js/raphael.js"></script>
<script>
var paper;
var state = false;
var e;
$(function()
{
paper = new Raphael("holder",640,480);
var path = paper.path("M 10,10 L 10,300");
var over = paper.path("M 10 10 L 316 248").attr("stroke","red");
var circle = paper.circle(316, 248, 5).attr({stroke : "none",fill : "red"});
e = paper.ellipse(10, 10, 7, 3).attr({stroke : "none",fill : "red"});
e.onAnimation(function()
{
console.log(this)
var x = this.attr("cx");
var y = this.attr("cy");
over.attr({path : "M 316,248L" +x+ "," +y+ "",stroke : "red"});
});
})
function start()
{
if(state)
{
e.animate({"cx":10,"cy":10},3000);
state = false;
}
else
{
e.animate({"cx":10,"cy":300},3000);
state = true;
}
}
</script>
</head>
<body>
<div id="holder"></div>
<input type="button" value="click" onclick="start()" >
</body>
</html>
第二种是他修改的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Raphael</title>
<script src="../js/raphael.js"></script>
<script>
Raphael("holder", 640, 480, function() {
var r = this, p = r.path("M10,10L10,300"),
flag = 0, over = r.path().attr({
stroke : "#fff"
}), len = p.getTotalLength(), e = r.ellipse(0, 0, 7, 3).attr({
stroke : "none",
fill : "red"
}).onAnimation(function() {
var t = this.attr("transform");
over.attr({
path : "M316,248L" + t[0][1] + "," + t[0][2] + "z",
stroke : "red"
});
});
r.circle(316, 248, 5).attr({
stroke : "none",
fill : "red"
});
r.customAttributes.along = function(v) {
var point = p.getPointAtLength(v * len);
return {
transform : "t" + [ point.x, point.y ] + "r" + point.alpha
};
};
e.attr({
along : 0
});
pathButton = r.image("按钮图片地址", 510, 288, 50, 43).attr({
cursor : "pointer",
title : "xxx"
}).click(function() {
if (flag == 0) {
e.animate({
along : 1
}, 2e4, function() {
e.attr({
along : 1
});
});
flag = 1;
} else {
e.animate({
along : 0
}, 2e4, function() {
e.attr({
along : 0
});
});
flag = 0;
}
});
});
</script>
</head>
<body>
<div id="holder"></div>
</body>
</html>
两种都能实现
效果图基本如下:
需要实现的是点击按钮,椭圆线段的一段移动到另外一端;椭圆所关联的另一条线段路径也随之改变;再次点击按钮,效果反之;
不多说了两种代码;
第一种是我做的;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Raphael</title>
<script src="../js/jquery.js"></script>
<script src="../js/raphael.js"></script>
<script>
var paper;
var state = false;
var e;
$(function()
{
paper = new Raphael("holder",640,480);
var path = paper.path("M 10,10 L 10,300");
var over = paper.path("M 10 10 L 316 248").attr("stroke","red");
var circle = paper.circle(316, 248, 5).attr({stroke : "none",fill : "red"});
e = paper.ellipse(10, 10, 7, 3).attr({stroke : "none",fill : "red"});
e.onAnimation(function()
{
console.log(this)
var x = this.attr("cx");
var y = this.attr("cy");
over.attr({path : "M 316,248L" +x+ "," +y+ "",stroke : "red"});
});
})
function start()
{
if(state)
{
e.animate({"cx":10,"cy":10},3000);
state = false;
}
else
{
e.animate({"cx":10,"cy":300},3000);
state = true;
}
}
</script>
</head>
<body>
<div id="holder"></div>
<input type="button" value="click" onclick="start()" >
</body>
</html>
第二种是他修改的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Raphael</title>
<script src="../js/raphael.js"></script>
<script>
Raphael("holder", 640, 480, function() {
var r = this, p = r.path("M10,10L10,300"),
flag = 0, over = r.path().attr({
stroke : "#fff"
}), len = p.getTotalLength(), e = r.ellipse(0, 0, 7, 3).attr({
stroke : "none",
fill : "red"
}).onAnimation(function() {
var t = this.attr("transform");
over.attr({
path : "M316,248L" + t[0][1] + "," + t[0][2] + "z",
stroke : "red"
});
});
r.circle(316, 248, 5).attr({
stroke : "none",
fill : "red"
});
r.customAttributes.along = function(v) {
var point = p.getPointAtLength(v * len);
return {
transform : "t" + [ point.x, point.y ] + "r" + point.alpha
};
};
e.attr({
along : 0
});
pathButton = r.image("按钮图片地址", 510, 288, 50, 43).attr({
cursor : "pointer",
title : "xxx"
}).click(function() {
if (flag == 0) {
e.animate({
along : 1
}, 2e4, function() {
e.attr({
along : 1
});
});
flag = 1;
} else {
e.animate({
along : 0
}, 2e4, function() {
e.attr({
along : 0
});
});
flag = 0;
}
});
});
</script>
</head>
<body>
<div id="holder"></div>
</body>
</html>
两种都能实现
效果图基本如下:
相关文章推荐
- raphael.js绘制中国地图 地图绘制方法
- Javascript实战开发:教你使用raphael.js绘制中国地图
- [JavaScript][图形图像]图形图像动画处理利器推荐--raphael.js (付:流程设计器例子)
- raphael.js绘制中国地图 地图绘制方法
- 【JS】使用canvas绘制动画-旋转风车加速减速启动停止
- Raphael.js绘制气泡墙
- jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
- jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
- Three.JS学习 4:循环渲染与动画
- Raphael.js最基本绘制示例代码
- js中div循环转动的动画代码
- JS+canvas绘制的动态机械表动画效果
- 用g.raphael.js高速绘制饼图、柱状图、点状图、折线图(下)
- 前端学习之慕课网--js绘制动画效果
- 使用raphael.js绘制中国地图
- 用g.raphael.js高速绘制饼图、柱状图、点状图、折线图(上)
- js是如何实现拖拽raphael.js所绘制图像的
- js绘制购物车抛物线动画
- 史上最扯Java图形绘制(J2SE)之一JAVA动画效果