作者:angela-gugupb_269 | 来源:互联网 | 2023-05-30 14:54
图片跟随路径循环运动,dom也跟着路径运动(利用实时获取坐标位置的方法,改变transform)1,准备路径a,自己脑补路径b,在ps上画好,然后在保存成png-24图片,背景透明,在网站ht
.attr("y","-390")
.attr("width","260")
.attr("height","390");
svg.append('animateMotion')//插入动画图片运动动画
.attr("id","animimg")
.attr("xlink:href","#img")
.attr("dur","100s")
.attr("begin","0s")
.attr("fill","freeze")
.attr("cy","0")
.attr("repeatCount","indefinite");
d3.selectAll($("#animimg")).append('mpath')//让上面的动画关联运动路径
.attr("xlink:href","#motionPath");
creatDom();//创建提示dom
move1({//让提示dom跟着路径运动
id: '#motionPath',//路径id
class:'.con1'//dom的class
});
function move1(obj){
var path = $(obj.id)[0];//获取路径dom对象
var tol = path.getTotalLength();//获取路径总长
var start = path.getPointAtLength(0);//获取路径上开始点的坐标
var time = 1000;//
var interval = time /10;//运动帧数 运动帧数 * time为运动总时间
var i = 0;
var per = tol / time;
var ttn = +new Date();
var then = +new Date(),now,delta;
function move(){
requestAnimationFrame(move);//循环调用move函数 调用间隔取决于浏览器绘制时间
now = Date.now();
delta = now - then;
if (delta > interval) {//当时间间隔大于运动帧数的时候调用绘制动画函数
then = now - (delta % interval);//更新时间
draw();
}
}
var x = start.x/10 + 30 + 'px';
var y = start.y/10 - 50 + 'px';
$(obj.class).css({
transform: 'translate(' + x + ',' + y+')'
});
move();
function draw(){
i++;
start = path.getPointAtLength(i*per);
x = start.x/10 + 30 + 'px';
y = start.y/10 - 50 + 'px';
$(obj.class).css({
transform: 'translate(' + x + ',' + y+')'
});
i === time && (i = 0);
}
}
function creatDom(){
var dom1 = $('
').css({
width:194,
height: 95,
boxShadow: '1px 0px 5px #ddb16a,0px 1px 5px #ddb16a,-1px 0px 5px #ddb16a,0px -1px 5px #ddb16a',
position:'absolute',
left: 0,
top: 0
});
con.append(dom1);
var p1 = '
状态: 道路拥堵
信息: 预计拥堵10分钟
拥堵长度: 2公里
时间:
';
var $p1 = $(p1).css({
color: '#ffffff',
fontSize: 14,
paddingLeft: 12,
paddingTop: -5,
textAlign: 'left'
});
$('.cartips1').append($p1);
$('.settipsTime1').text(getTime());
function getTime(){
var data = new Date(),
year = data.getFullYear(),
mon = data.getMonth() + 1,
day = data.getDate(),
hour = data.getHours(),
minu = data.getMinutes();
mon <10 && (mon = '0' + mon);
day <10 && (day = '0' + day);
hour <10 && (hour = '0' + hour);
minu <10 && (minu = '0' + minu);
return year + '-' + mon + '-' + day + ' ' + hour + ":" + minu;
}
}