动画实际上就是在一定时间内,改变一个元素的某些属性。

这里简单实现一个JavaScript运动的框架。主要包括:

  1. 速度动画(改变left、right、width、height、opacity)
  2. 缓冲运动
  3. 多物体运动
  4. 任意属性值改变
  5. 链式运动
  6. 多属性同时变化

速度动画

速度动画就是通过改变left、right、width、height、opacity的值来达到动画效果。我们先写一个简单的HTML结构:

<div id="div1">
<span id="share">分享</span>
</div>

具体CSS样式效果如下图:

这里,我用CSS将div的left值设置为-200px,使其移除浏览器窗口:

具体CSS参考如下:

body {
font-family: "SF UI Text", serif, sans-serif;
font-size: 12px;
}
* {
margin: 0;
padding: 0;
}
#div1 {
width: 200px;
height: 200px;
margin-top: 20px;
background: rgb(43, 221, 255);
position: relative;
left: -200px;
top: 0;
}
#div1 span {
width: 20px;
background: rgb(255, 119, 157);
position: absolute;
left: 200px;
top: 75px;
color: #fff;
text-align: center;
cursor: pointer;
padding: 5px 1px 5px 0;
border-radius: 0 5px 5px 0;
}
#div1 span:hover {
background: rgb(255, 84, 137);
}

如果我们想要在鼠标经过span上时,让这个div显示出来,很简单,就是让div的left值变为0。想要动画效果,就需要用到定时器。

window.onload = function () {
//速度动画
(function () {
var div = document.getElementById("div1");
var timer = null; div.onmouseover = function () {
startMove(0);
};
div.onmouseout = function () {
startMove(-200);
};
function startMove(targetPosition) {
clearInterval(timer);
var speed = 0;
if (targetPosition < 0) {
speed = -10;
} else {
speed = 10;
}
timer = setInterval(function () {
if (div.offsetLeft == targetPosition) {
clearInterval(timer);
} else {
div.style.left = div.offsetLeft + speed + 'px';
}
}, 30);
}
})();
};

效果如下:

我们把所有代码放在了一个匿名函数(function(){ })()中,并且立即执行,目的是为了防止全局变量的污染。

同理可实现改变透明度的动画:

(function () {
var div2 = document.getElementById("div2");
var timer = null; div2.onmouseover = function () {
changeOpacity(60);
};
div2.onmouseout = function () {
changeOpacity(100);
}; var opacity = 100; function changeOpacity(targetOpacity) {
clearInterval(timer);
var speed = 0;
if (opacity > targetOpacity) {
speed = -10;
} else {
speed = 10;
}
timer = setInterval(function () {
if (opacity == targetOpacity) {
clearInterval(timer);
} else {
opacity = opacity + speed;
div2.style.opacity = opacity / 100;
}
}, 30);
} })();

效果如下:

HTML结构:

<div id="div2"></div>

CSS:

#div2 {
width: 200px;
height: 200px;
background: rgb(255, 84, 137);
cursor: pointer;
}

速度动画讲解完了。下一篇讲解运动缓冲效果。

最新文章

  1. iOS NSDate等时间类的使用
  2. NSDateFormatter 相关理解
  3. mvc-servlet---ServletConfig与ServletContext对象详解(转载)
  4. atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
  5. android ant 多渠道批量打包
  6. shell 基本结构
  7. Visual C++ 打印编程技术-编程基础-映射模式
  8. USB Type-C“三剑客”: 连接器、控制器和电缆
  9. TFS 2012使用简介(一)
  10. Google图片搜索
  11. eclipse下:selenium+python自动化之Chrome driver
  12. bzoj 4373: 算术天才⑨与等差数列 hash
  13. C#/ASP.NET/AJAX
  14. java--面向对象编程
  15. Vijos 1033 整数分解(版本2)
  16. python爬虫小结1
  17. Eclipse 基础操作与设置
  18. FineReport启动后访问404
  19. 解决-webkit-box-orient: vertical;(文本溢出)属性在webpack打包后无法编译的问题
  20. Hadoop记录-yarn ResourceManager Active频繁易主问题排查(转载)

热门文章

  1. MySQL数据库设计总结
  2. ICC_lab总结——ICC_lab3:布局
  3. spring-AOP-基于Schema切面的小例子
  4. YII contoller控制器之间跳转的方法redirect
  5. iOS开发之左右抖动效果
  6. Struts2(二)之封装请求正文、数据类型转换、数据验证
  7. 如何修改vsftpd的默认根目录/var/ftp/pub到另一个目录?
  8. Windows上安装Kafka需要注意的几点
  9. 分解机(Factorization Machines)推荐算法原理
  10. 疑问:Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间