这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文主要对 javascript 实现图片切换(动画版)的方法进行步骤分析、实例介绍,具有很好的参考价值,需要的朋友一起来看下吧
学习了妙味课堂的图片切换(动画版)
这个小效果相对简单一点。
知识预备:
【1】background-position-x
background-position 属性设置背景原图像(由 background-image 定义)的位置,意味着使用这个属性的前提是必须设置背景原图像 background-image。
background-position 有两个属性值, background-position:x | y,用法上可以对其一个属性单独使用 background-position-x 和 background-position-y。
准备工作完毕,开始写代码
第一步
由于这次需要的 div 很多,所以采用动态添加的方式,直接看代码
- <style>
- body{
- margin: 0;
- background-color: #5e5e5e;
- }
- #box{
- width: 857px;
- height: 574px;
- padding-top: 126px;
- padding-left:143px;
- background: url(img/bg.png) no-repeat;
- margin: 0px auto;
- }
- #wrap{
- width: 700px;
- height: 420px;
- transform-style: preserve-3d;
- perspective: 800px;
- }
- #wrap div{
- width: 10px;
- height: 420px;
- background: url(img/01.png) no-repeat;
- float: left;
- transition: .5s;
- }
- </style>
- </head>
- <body>
- <div id="box">
- <div id="wrap"></div>
- </div>
- <script>
- //在wrap下,写70个div,每个div显示一张图片的一小片部分,这样70个div能完整的显示出一张图片
- for(var i=0;i<70;i++){
- str +='<div style="background-position-x:'+(-10*i)+'px"></div>';
- }
- oWrap.innerhtml = str;
- //获取70个div
- var divs = oWrap.getElementsByTagName('div');
- </script>
- </body>
第二步
写 tab() 函数,设置每个 div 要做的动画
tab() 函数
- // 每个div设置前一个div的透明度为1,并且设置自己的透明度为0和背景图片
- function tab(n){
- // 0
- if(divs[n-1]){
- divs[n-1].style.opacity = 1;
- }
- // 70
- if(divs[n]){
- divs[n].style.opacity = 0;
- divs[n].style.backgroundImage = "url(img/0"+imgNum+".png)";
- }
- }
第三步
写 go() 函数,利用定时器改变 tab() 函数的参数并且适时的改变背景图片
go()
- //给tab()函数传递n值
- function go() {
- timer = setInterval(function() {
- tab(num);
- num++;
- //一张图片切换完毕
- if (num == 71) {
- clearInterval(timer);
- //切换下一张图片
- imgNum++;
- //num清0,动画效果从第一个div开始
- num = 0;
- //当切到最后一张图片时,在从第一张开始切换
- if (imgNum == 6) {
- imgNum = 1;
- }
- //切换完一张图片时切换下一张图片的间隔
- setTimeout(go, 800);
- }
- //div变换的速度
- },
- 80);
- }
总结:这个动画效果实现起来简单,代码问题不大,主要就是实现思路的问题。
源码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>图片切换(动画版)</title>
- <style>
- body{
- margin: 0;
- background-color: #5e5e5e;
- }
- #box{
- width: 857px;
- height: 574px;
- padding-top: 126px;
- padding-left:143px;
- background: url(img/bg.png) no-repeat;
- margin: 0px auto;
- }
- #wrap{
- width: 700px;
- height: 420px;
- transform-style: preserve-3d;
- perspective: 800px;
- }
- #wrap div{
- width: 10px;
- height: 420px;
- background: url(img/01.png) no-repeat;
- float: left;
- transition: .5s;
- }
- </style>
- </head>
- <body>
- <div id="box">
- <div id="wrap"></div>
- </div>
- <script>
- //在wrap下,写70个div,每个div显示一张图片的一小片部分,这样70个div能完整的显示出一张图片
- for(var i=0;i<70;i++){
- str +='<div style="background-position-x:'+(-10*i)+'px"></div>';
- }
- oWrap.innerHTML = str;
- //获取70个div
- var divs = oWrap.getElementsByTagName('div');
- go();
- //给tab()函数传递n值
- function go(){
- timer = setInterval(function(){
- tab(num);
- num++;
- //一张图片切换完毕
- if(num == 71){
- clearInterval(timer);
- //切换下一张图片
- imgNum++;
- //num清0,动画效果从第一个div开始
- num = 0;
- //当切到最后一张图片时,在从第一张开始切换
- if(imgNum == 6){
- imgNum = 1;
- }
- //切换完一张图片时切换下一张图片的间隔
- setTimeout(go,800);
- }
- //div变换的速度
- },80);
- }
- // 每个div设置前一个div的透明度为1,并且设置自己的透明度为0和背景图片
- function tab(n){
- // 0
- if(divs[n-1]){
- divs[n-1].style.opacity = 1;
- }
- // 70
- if(divs[n]){
- divs[n].style.opacity = 0;
- divs[n].style.backgroundImage = "url(img/0"+imgNum+".png)";
- }
- }
- </script>
- </body>
- </html>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 phperz!
来源: http://www.phperz.com/article/17/0530/329196.html