鼠标悬停在div元素时,实现圆弧边框加载效果。
HTML代码:
<div class="btn"> <canvas width="44" height="44" id="btn"></canvas> </div>
CSS代码:
.btn {width:44px;height:44px;border-radius:50%;border:1px solid #f00;cursor:pointer;}
.ctxBtn canvas {position:absolute;left:0;top:0;width:100%;height:100%;}
js代码:
var canvas, req, req2, color;
function getObj(ojb, col){
canvas = document.getElementById(ojb),
context = canvas.getContext('2d'),
center = canvas.width / 2,
rad = Math.PI * 2 / 100,
speed = 4;
color = col;
}
function drawFrame() {
req = requestAnimationFrame(drawFrame);
context.clearRect(0, 0, canvas.width, canvas.height);
context.save();
context.beginPath();
context.strokeStyle = color;
context.lineWidth = 2;
context.arc(center, center, center -1, -Math.PI / 2, -Math.PI / 2 + speed * rad, false);
context.stroke();
context.restore();
if (speed < 40){
speed += 4;
}else{
speed = 40;
}
}
function canelDraw() {
req2 = requestAnimationFrame(canelDraw);
context.clearRect(0, 0, canvas.width, canvas.height);
context.save();
context.beginPath();
context.strokeStyle = color;
context.lineWidth = 2;
context.arc(center, center, center -1, -Math.PI / 2, -Math.PI / 2 + speed * rad, false);
context.stroke();
context.restore();
if (speed > 0){
speed -= 4;
}else{
speed = 0;
}
}
调用代码:
$(function(){
$('.btn').hover(function(){
cancelAnimationFrame(req2);
var _id = $(this).children().attr('id');
getObj(_id,'#000');
drawFrame();
},function(){
cancelAnimationFrame(req);
canelDraw();
});
}); 