简单的运动函数
var demo1=document.getElementById("demo1");
demo1.onmouseover=function(){
startMove(0);
}
demo1.onmouseout=function(){
startMove(-320);
}
var timer//全局变量
function startMove(target){
clearInterval(timer)//一开始要清除所有的定时器避免累加改变速度
var demo1=document.getElementById("demo1");
timer=setInterval(function(){
//匀速运动
/*var speed=0;
if(demo1.offsetLeft>target){
speed=-10;
}else{
speed=10;
}*/
//变速运动
var speed=(target-demo1.offsetLeft)/10;
//形成一个减速效果
speed=speed>0?Math.ceil(speed):Math.floor(speed)//进行取整,保证最后不会有剩余
if(demo1.offsetLeft==target){
clearInterval(timer);
}else{
demo1.style.left=demo1.offsetLeft+speed+'px';
}},30)
}
效果图
文章图片
第一张图实在鼠标经过时滑动出来的
【javascript|JS动画封装】图形变化和透明度变化JS代码
这个例子是一个同步运动
var li=document.getElementById('li');
li.onmouseover=function(){
changeShape(li,{width:401,height:300,opacity:30});
}
li.onmouseout=function(){
changeShape(li,{width:400,height:200,opacity:100});
//这里面的{}为json格式}
//changeShape(obj,{attr1:target1,attr2:target2},fn)
function changeShape(obj,json,fn){
var flag=true;
//假设所有运动到达目标值,确保不会有一个停止之后导致其他运动停止(同步运动)
clearInterval(obj.timer);
obj.timer=setInterval(function(){
for(attr in json){//这是json调取的格式,可以自行学习下
//这句话就是遍历其中属性
var cur=0;
if(attr=='opacity'){
//先变成浮点数,再进行四舍五入,因为数字变为浮点数时计算机无法准确取得,所以需要四舍五入
var cur=Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
var cur=parseInt(getStyle(obj,attr))
}
//速度设定
var speed=(json[attr]-cur)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
//运动判断
if(cur!=json[attr]){
flag=false
}
if(attr=='opacity'){
obj.style.filter='alpha(opacity='+(cur+speed)+')'//兼容
obj.style.opacity=(cur+speed)/100;
}else{
obj.style[attr]=cur+speed+'px';
}
}
if(flag){
clearInterval(timer)
//回调函数,用来链式运动的,一个接着一个的运动
if(fn){
fn();
}
}},30)
}
推荐阅读
- 测试|软件测试 Web自动化测试 基础知识 HTML CSS JavaScript
- 前端|简单零基础学会H5移动端滑动翻页效果
- JavaScript|DOM操作CSS
- 对象|自己定义构造函数来实现tab栏效果以及this的指向问题
- 节流--防抖
- 剑指offer29顺时针打印矩阵
- JavaScript 权威指南-学习笔记(一)
- 网页|SheetJS xlsx js库入门使用
- 单线程的 JavaScript 是怎么实现异步的?