原生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>




相关文章
|
4天前
|
前端开发 JavaScript
前端 js 经典:Object 常用原生方法
前端 js 经典:Object 常用原生方法
10 2
|
4天前
|
前端开发 JavaScript
前端 js 经典:array 原生方法
前端 js 经典:array 原生方法
10 1
|
4天前
|
JavaScript 索引
jQuery 实现 图片框切换【与原生 JS 对比】
jQuery 实现 图片框切换【与原生 JS 对比】
|
5天前
|
监控 JavaScript 前端开发
超越原生:探索Node.js中最佳文件系统三方库
超越原生:探索Node.js中最佳文件系统三方库
|
6天前
|
JavaScript 前端开发 索引
JavaScript array 原生 reduce 方法的模拟实现
JavaScript array 原生 reduce 方法的模拟实现
9 2
|
6天前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
11 2
|
6天前
|
JavaScript 计算机视觉
原生js通过年龄判断是否可以抽奖
原生js通过年龄判断是否可以抽奖
11 0
|
6天前
|
缓存 JavaScript 前端开发
【JavaScript 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。
|
6天前
|
JavaScript 前端开发 安全
javascript操作DOM的方法
javascript操作DOM的方法
14 0
|
6天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)