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




相关文章
|
2月前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
1月前
|
编解码 JavaScript 前端开发
在跨平台虚拟 DOM 框架中处理动画效果
【10月更文挑战第25天】在跨平台虚拟 DOM 框架中处理动画效果需要综合运用多种技术和方法,充分考虑不同平台的特点和性能要求,通过合理的设计和优化,实现高效、流畅且具有良好兼容性的动画效果,从而为用户提供更加丰富和生动的交互体验。
107 63
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
1月前
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
79 4
|
3月前
|
JavaScript 前端开发 索引
JavaScript HTML DOM 节点列表
JavaScript HTML DOM 节点列表
22 5
|
3月前
|
JavaScript 前端开发 索引
JavaScript HTML DOM 集合(Collection)
JavaScript HTML DOM 集合(Collection)
38 4
|
3月前
|
JavaScript 前端开发 索引
你可能没有听说过 js中的 DOM操作还有这个: HTMLCollection 和 NodeList
该文章详细解释了JavaScript中HTMLCollection和NodeList这两种DOM集合类型的特性、使用方法及其区别,并通过实例代码展示了如何操作这两种集合来选取和遍历DOM元素。