首页 > 其他分享 >js+css元素动态出现,前端让元素从底部动态显现,前端让元素从底部跳跃显示

js+css元素动态出现,前端让元素从底部动态显现,前端让元素从底部跳跃显示

时间:2024-06-18 16:57:34浏览次数:25  
标签:动画 dom 前端 元素 className animation 底部 var

实现效果

实现原理

一点也不复杂,耐心看完,思路理解后直接复制粘贴即可使用

1.为想要动态出现的元素添加指定class类名,我这里用(animate-element)

2.监听屏幕滚动,屏幕滚动时,如果屏幕高度减去元素顶部相对于屏幕的位置大于0的话,说明已经滚动到当前元素,然后给这个元素添加class动画,从而实现元素动态出现的效果

3.下方封装的代码可以在元素标签上添加自定义动画和延迟时间,没有添加自定义的话统一默认效果

html

//若无需特殊处理,用默认的即可
<div class="animate-element"></div>


//若需要对某个元素进行特殊处理,只为此元素添加特点的clss类与动画延迟时间,data-animation与data-animationDelay是下方js封装的自定义的css动画效果类名与延迟时间
<div class="animate-element" data-animation="fly-down" data-animationDelay="3000"></div>

css

.animate-element {
  opacity: 0;
}

.animated {
  animation-duration: 0.5s;
}

.fly-up {
  animation-name: fly-up;
  animation-fill-mode: both;
  animation-duration: 0.5s;
}
@keyframes fly-up {
  0% {
    -webkit-transform: translateY(100px);
    opacity: 0;
  }
  100% {
    -webkit-transform: translateY(0);
    opacity: 1;
  }
}

js

function onScroll() {
  // 获取所有具有 "animate-element" 类的 DOM 元素
  var doms = document.getElementsByClassName("animate-element");
  if (!doms) {
    return;
  }

  // 遍历这些 DOM 元素
  for (var i = 0; i < doms.length; i++) {
    var dom = doms[i];

    // 如果元素已经有 "animated" 类,则跳过该元素
    if (dom.className.indexOf("animated") > -1) {
      continue;
    }

    // 获取元素的位置信息
    var domRect = dom.getBoundingClientRect();
    // 计算元素顶部距离窗口顶部的高度
    var domVisibleHeight = window.innerHeight - domRect.top;

    // 如果元素距离窗口顶部的高度大于 100 像素,开始动画
    if (domVisibleHeight > 100) {
      // 获取元素数据集中的动画类型,默认为 "fly-up"
      var animation = dom.dataset.animation || "fly-up";
      // 获取元素数据集中的动画延迟时间
      var animationDelay = dom.dataset.animationDelay;

      // 添加 "animated" 类以标识元素已经被动画
      dom.className = dom.className + " animated";

      if (!animationDelay) {
        // 如果没有动画延迟,立即添加动画类
        dom.className = dom.className + " " + animation;
      } else {
        // 如果有动画延迟,使用 setTimeout 在指定延迟后添加动画类
        (function (_dom) {
          setTimeout(function () {
            _dom.className = _dom.className + " " + animation;
          }, animationDelay);
        })(dom);
      }
    }
  }
}

// 为窗口的 scroll 事件添加 onScroll 事件处理器
window.addEventListener("scroll", onScroll, false);

标签:动画,dom,前端,元素,className,animation,底部,var
From: https://blog.csdn.net/weixin_48095278/article/details/139747937

相关文章

  • 大数据毕业设计之前端10:tab的关闭,让滑动块何去何从
    前言之前的两篇文章,一篇实现了tab页的新增,一个讲了如何实现滑动块,本篇就来讲一下如何实现tab的关闭,以及tab关闭时滑动块的变换情况。关闭tab关闭tab主要从两个方面实现:定义关闭tab方法触发滑动块位置的修改绑定点击事件tab主要分为两个部分,左边的名称和右边的关闭按钮......
  • 前端面试题-基础篇(一)
    最近在准备面试,搜集了一些偏基础的面试题,简单记录一下。1、列举一些常用的ES6新特性1、const、let(块级作用域{})不存在变量提升,不能在变量声明之前使用,且只在当前作用域有效,避免了全局命名冲突let用来声明变量,const用来声明常量,const声明的值不能被修改(对于引用类型,指的是......
  • 前端水印
    <!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minim......
  • 使用docx-preview打印文档时,页数超出和页面元素样式问题
    #在打印时调整内容边距及隐藏Header的问题和解决方案##问题描述在使用JavaScript代码唤起打印窗口时,生成的文档中`<section>`标签自带`padding`样式,这导致内容无法铺满整个A4页面。此外,页面中还有一个`header`元素会占据头部的一部分高度,需要在打印时去掉......
  • 【前端面经】数组算法题解
    目录题目一:两数之和题目二:最长无重复字符子串题目三:合并两个有序数组题目四:寻找数组中的峰值题目一:两数之和描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。......
  • 前端面试题日常练-day75 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末在Sass中,以下哪个功能用于生成带有浏览器前缀的CSS属性?a)@extendb)@mixinc)@importd)@includeSass中的函数(Function)用于什么目的?a)执行数学计算b)定义样式块c)导入外部文件d)引用父级选择器......
  • javaScript获取dom元素的常见方法
    前端开发都知道在react、vue等框架没问世之前,开发人员要实现用户对网页元素进行操作时,其中就包括dom元素的选择,不可避免的就是要获取到目标元素再接着编写功能代码。废话少说让我们来看看javaScript获取dom元素的常见方法元素js获取dom元素的方法常有以下几种:1.两个......
  • JS 前端动态引用 js 、 css 文件
    JS前端动态引用js、css文件 letjsArrPath=['/web_config_other.js','/web_point.js']letcssArrPath=[]consthead=document.getElementsByTagName("head")[0];jsArrPath.forEach(jsPath=>{letscriptElement=document......
  • IT入门知识第五部分《前端开发》(5/10)
    目录引言介绍前端开发的重要性网页技术的演变现代前端开发的特点1.前端技术概述定义前端开发前端开发的主要职责前端开发与用户体验的关系1.1前端开发的重要性用户界面和交互的重要性响应式设计的需求1.2前端开发的核心技能熟悉Web标准和最佳实践跨浏览器兼容......
  • 作为后端开发工程师,到底要不要学前端
    虽然Java程序员面试时基本不会出现前端相关问题,但是在企业中,往往需要前后端程序员配合完成工作。会一些前端,不仅可以提高你们的协作效率,还能提高自己对整个项目的了解和掌控力,甚至能独立开发出一个完整项目!这点也是能给面试加分的。#知识HTMLCSSJavaScriptAjaxVue#学......