原生JavaScript之dom与setInterval/settimeout结合实现动画

简介: 原生JavaScript之dom与setInterval/settimeout结合实现动画

动画效果如何实现





那么好,这次我们要讲解的就是利用dom事件和定时方法来实现一个简单的动画效果.


实现这个效果,一共分为三个步骤:


1.实现效果


2.实现点击切换位置


3.实现动画效果


样式

两个div,一个父div,一个子div,用position+relative+absolute定位实现左上角效果,两个按钮

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      #container {
        width: 300px;
        height: 300px;
        background-color: blue;
        position: relative;
      }
      #content {
        width: 50px;
        height: 50px;
        background-color: red;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
  </head>
  <body>
    <div id="container">
      <div id="content"></div>
    </div>
    <button onclick="dianji()">setTimeout</button>
    <button onclick="jidian()">setInterval</button>
  </body>
</html>


dom切换位置


切换位置本质就是切换position的样式,用到的方法就是


document.getElementById("id").style.left='content'


    <style>
      #container {
        width: 300px;
        height: 300px;
        background-color: blue;
        position: relative;
      }
      #content {
        width: 50px;
        height: 50px;
        background-color: red;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
<body>
    <div id="container">
      <div id="content"></div>
    </div>
    <button onclick="dianji()">setTimeout</button>
    <button onclick="jidian()">setInterval</button>
    <script>
      function dianji(){
        document.getElementById('content').style.left='250px'
        document.getElementById('content').style.top='250px'
      }
    </script>
</body>


当点击的时候,我们通过dom文档对象的id的style来改变具体的样式,这里我们改的是absolute中的left和top.


定时器实现动态移动位置


setTimeout实现

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      #container {
        width: 300px;
        height: 300px;
        background-color: blue;
        position: relative;
      }
      #content {
        width: 50px;
        height: 50px;
        background-color: red;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
  </head>
  <body>
    <div id="container">
      <div id="content"></div>
    </div>
    <button onclick="dianji()">setTimeout</button>
    <button onclick="jidian()">setInterval</button>
    <script>
      let temp=0
      function dianji(){
        temp+=1;
        setTimeout(()=>{
          if(temp==1){
            document.getElementById('content').style.left=0
            document.getElementById('content').style.top=0
          }
          if(temp<=250){
            document.getElementById('content').style.left=temp+'px'
            document.getElementById('content').style.top=temp+'px'
            dianji()
          }else{
            temp=0;
            clearTimeout(temp)
          }
        },5)
      }
    </script>
  </body>
</html>


setInterval定时

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      #container {
        width: 300px;
        height: 300px;
        background-color: blue;
        position: relative;
      }
      #content {
        width: 50px;
        height: 50px;
        background-color: red;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
  </head>
  <body>
    <div id="container">
      <div id="content"></div>
    </div>
    <button onclick="dianji()">setTimeout</button>
    <button onclick="jidian()">setInterval</button>
    <script>
      let temp = 0
      function dianji() {
        temp += 1;
        setTimeout(() => {
          if (temp <= 250) {
            document.getElementById('content').style.left = temp + 'px'
            document.getElementById('content').style.top = temp + 'px'
            dianji()
          } else {
            temp = 0;
            clearTimeout(temp)
          }
        }, 5)
      }
      function jidian() {
        let id = setInterval(frame, 5)
        function frame() {
          temp += 1;
          if (temp <= 250) {
            document.getElementById('content').style.left = temp + 'px'
            document.getElementById('content').style.top = temp + 'px'
          } else {
            temp = 0
            clearInterval(id)
          }
        }
      }
    </script>
  </body>
</html>




相关文章
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
494 158
|
JavaScript 前端开发
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
568 156
|
JavaScript 前端开发
CSS3 动画和 JavaScript 动画的性能比较
具体的性能表现还会受到许多因素的影响,如动画的复杂程度、浏览器的性能、设备的硬件条件等。在实际应用中,需要根据具体情况选择合适的动画技术。
457 154
|
编解码 JavaScript 前端开发
在跨平台虚拟 DOM 框架中处理动画效果
【10月更文挑战第25天】在跨平台虚拟 DOM 框架中处理动画效果需要综合运用多种技术和方法,充分考虑不同平台的特点和性能要求,通过合理的设计和优化,实现高效、流畅且具有良好兼容性的动画效果,从而为用户提供更加丰富和生动的交互体验。
230 63
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
512 3
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
409 0
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
ractive.js联系表单动画效果源码
一款ractive.js联系表单动画效果,很有创意的发送邮件、联系内容等表单,基于ractive.js实现的动画效果,以发送信件的方式。
142 1
|
JavaScript
Vue3基础(十wu)___ref获取原生dom元素
本文介绍了Vue3中使用`ref`来获取和操作原生DOM元素的方法,通过示例展示了如何通过`.value`改变元素的样式。
356 1
Vue3基础(十wu)___ref获取原生dom元素
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
438 1
原生JavaScript+canvas实现五子棋游戏_值得一看
|
JavaScript
js动画循环播放特效源码(上班族的一天)
js动画循环播放特效是一段实现了包含形象的卡通小人吃、睡、电脑工作的网页动画,js循环动画,简单的画面设计。非常丝滑有意思,欢迎对此代码感兴趣的朋友前来下载参考。
169 2

热门文章

最新文章