javaScript动画项目案例

javaScript动画项目案例javaScript 动画项目案例示例代码 我的 github1 动画库编写匀速运动案例一 DOCTYPE tml htmllang en head metacharset UTF 8 metacharset UTF 8 head htmllang en

javaScript动画项目案例

1.动画库编写

匀速运动

案例一

效果:匀速运动

 
   
    
    Document 
     
    

匀速运动

使用定时器控制位置

案例二:侧边栏效果

效果:侧边栏效果

 
   
    
    Document 
     
    
拉开

缓动运动

 
   
    
    Document 
     
    
拉开

透明度运动

 
   
    
    Document 
     
    

多物体运动

效果:多物体运动

 
   
    
    Document 
     
    

注意:多物体运动时,定时器需要绑在对象上,清除定时器时,只需要清除自己的定时器即可

多值运动

 
   
    
    Document 
     
    

链式运动

/ * 动画函数 * @param {Object} obj 当前对象 * @param {Object} attr 当前元素对象的属性 * @param {Object} end 末尾位置 * @param {Object} fn 回调函数 * */ function startAnimation(obj,attr,end,fn) { clearInterval(obj.timer); obj.timer = setInterval(function () { let cur = 0,speed = 0; if(attr === 'opacity'){ cur = Math.round(parseFloat(getStyle(obj,attr)) * 100); // console.log(getStyle(obj,attr)); }else{ cur = parseInt(getStyle(obj,attr)); } if(end === cur){ clearInterval(obj.timer); // 回调函数放在动画执行结束之后 if(fn){ fn(); } return; } // 运动 speed = end > cur ? 10:-10; if(attr === 'opacity'){ // console.log(cur + speed); obj.style[attr] = (cur + speed) / 100; obj.style['filter'] = `alpha(opacity:${cur + speed})`; }else{ obj.style[attr] = cur + speed + 'px'; } },30) } // 获取属性 function getStyle(obj,attr) { if(obj.currentStyle){ // 针对IE浏览器 return obj.currentStyle[attr]; }else{ // 针对于Firefox浏览器 return getComputedStyle(obj,null)[attr]; } } 

index.html

 
   
    
    Document 
     
    

同时运动

动画库最终版本
myAnimation2.js

/ * 动画函数 * @param {Object} obj 当前对象 * @param {Object} json 当前元素属性列表 * @param {Object} fn 回调函数 * */ function startAnimation(obj,json,fn) { clearInterval(obj.timer); obj.timer = setInterval(function () { let cur = 0,speed = 0; let flag = true; // flag:代表所有动画执行完毕 // 将json中所有元素属性遍历,修改 for(attr in json){ let end = json[attr]; // 获取对象属性值 switch(attr){ case "opacity": cur = Math.round(parseFloat(getStyle(obj,attr)) * 100); break; case "scrollTop": cur = obj[attr]; break; default: cur = parseInt(getStyle(obj,attr)); } // 临界处理 该动画没有执行完毕 if(end !== cur){ flag = false; }else{ continue; } console.log(cur); // 设置速度:判断结束值end和当前值cur相差值小于speed速度 if(end > cur){ // end=100 cur=92 speed=10 speed = end - cur < 100?end - cur:100; }else{ // end=0 cur=2 speed=-10 speed = end - cur > -100?end - cur:-100; } // 设置值 switch(attr){ case "opacity": obj.style[attr] = (cur + speed) / 100; obj.style['filter'] = `alpha(opacity:${cur + speed})`; break; case "scrollTop": obj[attr] = cur + speed; break; default: obj.style[attr] = cur + speed + 'px'; } } // 查看flag是否为true, 都当所有属性都没有被修改时,flag为true,结束动画 if(flag){ clearInterval(obj.timer); if(fn){ fn(); } return ; } },30) } // 获取属性 function getStyle(obj,attr) { if(obj.currentStyle){ // 针对IE浏览器 return obj.currentStyle[attr]; }else{ // 针对于Firefox浏览器 return getComputedStyle(obj,null)[attr]; } } 
 
   
    
    Document 
     
    

案例

案例一:关闭页脚广告效果

 
   
    
    Document 
     
     
     
     
    
  

案例二:侧边栏横幅效果

 
   
    
    Document 
     
    
javaScript动画项目案例

案例三:淘宝侧边导航效果

 
   
    
    Document 
     
    
爱逛好货
好店直播
品质特色
实惠热卖

[…Divs] 使用了es6写法,将dom获取的集合类型转换为真正的数组,有forEach变量方法;这一步等价于使用for(element in Divs) 循环

案例四:轮播图

 
   
    
    Document 
     
      
      
      
     
    
  

index.css

*{ padding: 0; margin: 0; } .slider{ width: 400px; height: 500px; margin: 100px auto; position: relative; overflow: hidden; } .slider_scroll { position: relative; width: 400px; height: 500px; } .slider_main{ position: relative; width: 400px; height: 500px; } .slider_main .item{ width: 40px; height: 500px; position: absolute; } .slider_main .item img{ width: 400px; height: 500px; } /* 索引部分 */ .slider_index{ width: 400px; height: 40px; line-height: 40px; text-align: center; color:#fff; font-weight: 700; z-index: 20; position: absolute; bottom: 0; background-color: rgba(0,0,0,.5); } .slider_index .slider_index_icon{ margin: 0 10px; line-height: 40px; cursor: pointer; } .slider_index .slider_index_icon.current{ color: red; } /* 下一张和上一张定位 */ .slider_scroll>span{ position: absolute; width: 30px; height: 68px; background: url(../images/icon-slides.png) no-repeat; top: 50%; margin-top: -34px; cursor: pointer; } .slider_scroll span.next{ right: 0; background-position: -46px 0; } .slider_scroll span.prev{ left: 0; background-position: 0 0; } 

index.js

window.onload = function () { // 获取元素 const slider = document.getElementById("slider"); const slider_main = document.getElementById("slider_main"); const slider_items = slider_main.children; const next = document.getElementById("next"); const prev = document.getElementById("prev"); const slider_index = document.getElementById("slider_index"); let iNode = 0; //当前显示索引的坐标 // 动态创建索引 [...slider_items].forEach((v,i)=>{ let span = document.createElement("span"); span.innerText = i+1; // 给索引添加类 if(i === 0){ span.className = "slider_index_icon current" }else{ span.className = "slider_index_icon" } slider_index.appendChild(span); }) // 让滚动元素归位 let scroll_w = this.parseInt(getStyle(slider,'width')); // console.log(scroll_w); [...slider_items].forEach((item,i,arr)=>{ if(i !== 0){ item.style.left = scroll_w + "px"; } }); // 下一步按钮 function autoPlay() { // 1.将显示的图片向左移动 startAnimation(slider_items[iNode],{ "left":-scroll_w }); // 将下一张图片放在中心盒子的右边 iNode++; if(iNode >= slider_items.length){ iNode = 0; } // console.log(slider_items[iNode].left); slider_items[iNode].style.left = scroll_w + "px"; // console.log(slider_items[iNode].left); // 将下一张图片向左移动 startAnimation(slider_items[iNode],{ "left":0 }); updateIndex(); } next.onclick = autoPlay; // 更新索引样式 let slider_index_items = slider_index.children; function updateIndex() { // console.log(slider_index_items); [...slider_index_items].forEach((item,i)=>{ if(i == iNode){ item.className = "slider_index_icon current"; }else{ item.className = "slider_index_icon" } }) } // 上一步按钮 prev.onclick = function () { // 1.将该元素右移动 startAnimation(slider_items[iNode],{ "left":scroll_w }) // 2.将上一个元素放在左边 iNode--; if(iNode < 0){ iNode += slider_items.length } slider_items[iNode].style.left = -scroll_w + "px"; // 3.将上一个元素右移 startAnimation(slider_items[iNode],{ "left":0 }) // 更新下面索引 updateIndex(); }; // 设置索引点击事件 [...slider_index_items].forEach((item,i)=> { item.onmousedown = function () { // 1.判断点击的索引与当前索引关系 if(iNode > i){ // 上一张图片效果 startAnimation(slider_items[iNode],{ "left":scroll_w }) slider_items[i].style.left = -scroll_w + "px"; }else if(iNode < i){ // 下一张图片效果 startAnimation(slider_items[iNode],{ "left":-scroll_w }) slider_items[i].style.left = scroll_w + "px"; } iNode = i; startAnimation(slider_items[iNode],{ "left":0 }) updateIndex(); } });; // 设置自动播放 let timer = window.setInterval(autoPlay,2000); // 设置鼠标悬浮停止定时器,离开开启定时器 slider.onmouseover = function () { clearInterval(timer); } slider.onmouseout = function () { timer = window.setInterval(autoPlay,2000); } } 

图片部分,在上传到github上面时,已经将素材上传上去了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212141.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午8:44
下一篇 2026年3月18日 下午8:44


相关推荐

  • ETL开发面试题集

    ETL开发面试题集ETL讲解(很详细!!!)ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。ETL是BI项目重要的一个环节。通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计…

    2022年6月13日
    77
  • 做3D游戏建模师有年龄限制吗?

    做3D游戏建模师有年龄限制吗?3D游戏建模师是一门非常火热的行业,现在很多游戏厂商都在高薪招聘3D游戏建模师。因此很多人在想要学习次世代建模技术的同时,又担心企做这个会不会有年龄的限制。其实大可不必担心,因为只要本身具有学习能力,愿意接受新知识,愿意与时俱进的提高自己,那么年龄就不是你的问题。其实年龄大的人从事3D游戏建模行业也是有一定优势的,他们生活阅历丰富,对于如何把握人物建模和场景建模方面的细节会有自己独到的理解。同时又具备一定缺陷,在学习方面会有一定的障碍,因为不管是记忆力还是对新知识的接受能力都会有所下降,所以一定要选择一

    2022年6月3日
    50
  • 数据库三大范式详解(通俗易懂)

    数据库三大范式详解(通俗易懂)数据库三大范式详解 通俗易懂

    2026年3月16日
    6
  • 弱网测试神器 QNET

    弱网测试神器 QNET主流弱网测试工具 Fiddler CharlesPC 端安装 作为代理服务器 设置延迟参数 模拟不同的网络情况 缺点是只能模拟延迟 如丢包 带宽等等是无法支持的 NetworkEmula 微软旗下的一款网络模拟的工具 PC 端安装 可以支持延迟 丢包 带宽等等弱网配置 缺点是其只针对 PC 端的弱网设置 移动端设备还需连接上 PC 端的网络 在 PC 端创建 wifi 热点 移动端设备连接热点 而且 win10 系统上会有一些 BUG Faceb

    2026年3月17日
    1
  • 搜索引擎sorl的搭建

    搜索引擎sorl的搭建一 入门 1 下载 windows 版本的 solr zip 文件 解压在一个文件名不包含空格的文件夹下 命令行输入 sorl 启动命令 这时候计算机正在运行 Solr 浏览器访问 localhost 8983 solr 跳转到 Solr 的管理界面 gt 在后台 solr 启动一个为 jetty 的 javaweb 服务器 端口为 8983 Solr 是运行在 Jetty 上的 web 应用程序 gt 每台 jetty 服务器上都

    2026年3月18日
    2
  • LoadRunner 11 安装及激活成功教程

    LoadRunner 11 安装及激活成功教程注意事项:  安装前,把所有的杀毒软件和防火墙关闭。  若以前安装过LoadRunner,则将其卸载。  安装路径不要带中文字符。  如果系统为WIN7,旗舰版才能安装。  安装完毕,需激活成功教程

    2022年7月22日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号