이 글은 애니메이션 효과를 추가하기 위한 DOM 요소 운영과 관련된 문제를 주로 소개하는 javascript에 대한 관련 지식을 제공합니다. 모두에게 도움이 되기를 바랍니다.
자바 스크립트 비디오 자습서,
web front-end- 】
- Dom 애니메이션 효과 요소는 왼쪽에서 오른쪽으로 이동하여 움직임의 왼쪽에서 오른쪽으로 이동합니다.
<div></div>
이동의 세 가지 요소
t = setInterval(function(){终止条件})
이동의 시작점은 실제로 API를 통해 현재 요소의 위치를 얻고 이 위치를 제공합니다. 운동의 시작으로.
Target
- Speed
- 모션의 기본 원리 타이머를 통해 요소가 CSS 속성 값을 타이머를 통해 짧은 간격으로 변경하게 하세요
이러한 연속적인 모션이 사용자에게 나타나는 애니메이션 효과
- DOM 애니메이션 효과 캡슐화
- 캡슐화의 주요 기능은 요소가 짧은 시간 간격으로 속성을 지속적으로 변경하여 애니메이션 효과를 얻을 수 있도록 하는 것입니다.
단일 속성 모션 프레임워크:
var box = document.getElementById("box"); var t = null; t = setInterval(function(){ })
균일 모션 캡슐화
// 元素的属性值 === 目标点 if(dom.attr === target){ clearInterval(t); }
- 투명도 대응
<button>开始运动</button> <div></div> <div></div> <script> var box = document.getElementById("box"); var btn = document.getElementById("btn"); var target = 500; // 速度可以根据 起始点和目标点进行判断,从而决定正负; var speed = 17; // - 方向; btn.onclick = function(){ // 1. 获取元素初始位置; var _left = box.offsetLeft; speed = target - _left >= 0 ? speed : -speed ; var interval = setInterval( function(){ // 4. 判定运动的终止条件; if(Math.abs(target - _left) <= Math.abs(speed) ){ // 因为终止时有可能没有到达目标点,因此我们把元素赋值到目标点位置; box.style.left = target + "px"; clearInterval( interval ); }else{ // 2. 元素根据初始位置进行改变; _left += speed; // 3. DOM操作,根据已有数据让元素属性发生改变; box.style.left = _left + "px"; } } , 30) } </script>
- 버퍼링 동작
- 버퍼링 동작은 동작 방식입니다
- 이런 동작은 동작 중에 속도가 변하는 동작입니다
-
- 거리가 작을수록 작아집니다 the speed
<script>// - 提取属性名作为参数; btn.onclick = function(){ animate( "left", 500 )}function animate( attr , target , speed = 10 ){ // 1. 获取元素初始样式 var _style = getComputedStyle( box ); // 2. 根据属性要求取出当前的属性的属性值; var _css_style = parseInt(_style[attr]); speed = target - _css_style >= 0 ? speed : -speed ; var interval = setInterval( function(){ // 4. 判定运动的终止条件; if(Math.abs(target - _css_style) <= Math.abs(speed) ){ // 因为终止时有可能没有到达目标点,因此我们把元素赋值到目标点位置; box.style[attr] = target + "px"; clearInterval( interval ); }else{ // 2. 元素根据初始位置进行改变; _css_style += speed; // 3. DOM操作,根据已有数据让元素属性发生改变; box.style[attr] = _css_style + "px"; } } , 30)}</script>
- 다중 속성 모션 프레임워크(확장)
animate를 여러 번 호출하면 타이머가 여러 개 열립니다
- 타이머의 데이터가 동일하기 때문에, 효과를 볼 수 없습니다
- 하지만 타이머를 여러 번 켜면 컴퓨터 성능이 극도로 소모됩니다
- 현재 타이머를 켜기 전에 이전 타이머를 닫으세요
<script>function animate( dom , attr , target , speed = 10 ){ // 1. 获取元素初始样式 var _style = getComputedStyle( dom ); // 2. 根据属性要求取出当前的属性的属性值; if( attr === "opacity"){ var _css_style = parseInt(_style[attr] * 100 ); target *= 100; }else{ var _css_style = parseInt(_style[attr]); } speed = target - _css_style >= 0 ? speed : -speed ; var interval = setInterval( function(){ // 4. 判定运动的终止条件; if(Math.abs(target - _css_style) <= Math.abs(speed) ){ // 因为终止时有可能没有到达目标点,因此我们把元素赋值到目标点位置; if( attr === "opacity"){ dom.style[attr] = target / 100; }else{ dom.style[attr] = target + "px"; } clearInterval( interval ); }else{ // 2. 元素根据初始位置进行改变; _css_style += speed; // 3. DOM操作,根据已有数据让元素属性发生改变; if( attr === "opacity"){ dom.style[attr] = _css_style / 100 ; }else{ dom.style[attr] = _css_style + "px"; } } } , 30)}</script>
<button>开始运动</button> <div></div> <script> var box = document.getElementById("box"); var btn = document.getElementById("btn"); btn.onclick = function(){ animate( box , "left" , 500 ) } function animate( dom , attr , target , transition = "buffer", speed = 10 ){ var _style = getComputedStyle( dom ); if( attr === "opacity"){ var _css_style = parseInt(_style[attr] * 100 ); target *= 100; }else{ var _css_style = parseInt(_style[attr]); } if( transition === "liner"){ speed = target - _css_style >= 0 ? speed : -speed ; } var interval = setInterval( function(){ if( transition === "buffer"){ // 计算速度; speed = (target - _css_style) / 10; //速度不取整在小数部分会做很多无意义的计算; speed = speed > 0 ? Math.ceil(speed) :Math.floor( speed ) } if(Math.abs(target - _css_style) <= Math.abs(speed) ){ // 因为终止时有可能没有到达目标点,因此我们把元素赋值到目标点位置; if( attr === "opacity"){ dom.style[attr] = target / 100; }else{ dom.style[attr] = target + "px"; } clearInterval( interval ); }else{ // 2. 元素根据初始位置进行改变; _css_style += speed; // 3. DOM操作,根据已有数据让元素属性发生改变; if( attr === "opacity"){ dom.style[attr] = _css_style / 100 ; }else{ dom.style[attr] = _css_style + "px"; } } } , 30) } </script> //只需要改变里面transition的值就可以调整运动模式 //buffer为缓冲运动 //liner为匀速运动
<script>// 在一个定时器之中,用for循环同时执行多次dom样式操作; // 1. 需要优化的部分:参数,要把样式部分的参数优化成一个对象; function animate( dom , attrs , transition = "buffer", speed = 10 ){ var _style = getComputedStyle( dom ); // 获取元素当前的属性 : for(var attr in attrs ){ // attr ? 要过渡的css属性名; // attrs[attr] ? 要过渡的当前属性; attrs[attr] = { target : attrs[attr], // 元素当前的属性放入到这个对象之中; now : parseInt(_style[attr]) } } // 因为直接关闭interval是没有作用的,此时的inteval是一个局部变量,每次animate被调用的时候都会直接重置; // 我们应该吧定时器的id放在当前正在执行过渡效果的dom对象上; clearInterval(dom.interval); dom.interval = setInterval( function(){ for(var attr in attrs){ // 取出 attrs 之中的目标点和当前值; speed = (attrs[attr].target - attrs[attr].now) / 10 ; // 根据速度正负,进行速度取整; speed = speed > 0 ? Math.ceil( speed ) : Math.floor( speed ); // 判定终止条件; if( attrs[attr].target === attrs[attr].now){ // 删除已经到达目标点的属性; delete attrs[attr] // 判定attrs里面已经没有属性了; for(var a in attrs){ return false; } clearInterval(dom.interval); }else{ attrs[attr].now += speed; dom.style[ attr ] = attrs[attr].now + "px"; } } } , 30)}// 优化参数之后,key值是等待运动的css属性,value值是元素的目标; btn.onclick = function(){ animate( box , { width : 500 , height : 400 } )}</script>
프로젝트 배경: Uniapp h5 애플리케이션, 사용자에게 다운로드를 요청하는 DOM은 원래 각 탭바(총 4개)에 추가하고 싶었지만 다른 방법을 시도하고 싶습니다.
효과는 다음과 같습니다: 코드로 직접 이동:
<style> *{ margin: 0; padding: 0; } .container{ width: 1130px; height: 286px; margin: 0 auto; position: relative; overflow: hidden; } .wrapper{ width: 6780px; position: absolute; left: 0; } .slide{ float: left; } .slide , .slide img{ width: 1130px; height: 286px; } .button-prev{ left: 0; background-position: 30px center; background-image: url(https://static.zcool.cn/git_z/z/widget/slider/images/svg/left_arrow.svg?v=2); top: 0; width: 13px; height: 100%; padding: 0 80px; border-radius: 2px; position: absolute; background-repeat: no-repeat; } .button-prev:hover{ background-image: url(https://static.zcool.cn/git_z/z/widget/slider/images/svg/left_arrowhover.svg?v=2); } .button-next{ right: 0; background-position: 91px center; background-image: url(https://static.zcool.cn/git_z/z/widget/slider/images/svg/right_arrow.svg?v=2); top: 0; width: 13px; height: 100%; padding: 0 80px; border-radius: 2px; position: absolute; background-repeat: no-repeat; } .button-next:hover{ background-image: url(https://static.zcool.cn/git_z/z/widget/slider/images/svg/right_arrowhover.svg?v=2); } .pagination{ position: absolute; bottom: 10%; width: 100%; height: 10px; left: 30px; } .pagination span{ display: inline-block; width: 10px; height: 10px; margin-left: 10px; border-radius: 50%; background-color: cornflowerblue; border: 2px solid transparent; background-clip: content-box; } .pagination span.active{ border: 2px solid skyblue; box-shadow: 0 0 5px skyblue; background-color: #fff; } </style>
코드를 통해 노드를 생성하면 코드는 스타일과 애니메이션이 됩니다. ;
js 설정 변환 애니메이션에 대해; 이 가장자리가 3D 형식으로 변경되었습니다
javascript 비디오 튜토리얼[관련 권장사항:<script></script> <script> // 轮播图的核心就是左右切换按钮,实现显示元素下标的改变; var index = 0 ; var prev = 0; var next_btn = document.querySelector(".button-next"); var prev_btn = document.querySelector(".button-prev"); var slides = document.querySelectorAll(".slide"); var wrapper = document.querySelector(".wrapper"); // 自动播放的阻止功能是在鼠标移入container容器之中就触发的; var container = document.querySelector(".container"); var bullets = document.querySelectorAll(".pagination span"); // 绑定事件 // - 轮播图改变下标功能必须设置边界; function bindEvent(){ next_btn.onclick = function(){ add(); bannerAnimate(); } prev_btn.onclick = function(){ reduce() bannerAnimate(); } container.onmouseover = function(){ stop(); } container.onmouseout = function(){ autoPlay(); } bullets.forEach( function( ele , i ){ ele.onmouseover = function(){ prev = index; // 防止穿帮逻辑; // - 如果在假的第0张图片上(在最后一张图片上) // - 我们先让真假图片呼喊然后在进行元素的动画效果; if( index === 5 ){ wrapper.style.left = 0; } index = i; bannerAnimate(); } }) } // 下标增加; function add(){ prev = index; if( index === slides.length - 1 ){ // 这个逻辑会在最后一张图片进行切换时进入; // 我们让wrapper直接位移到开头,改变元素位置的同时让用户无法感知; wrapper.style.left = 0; // 我们需要从第0个图片切换到第一个图片; // -因为我们最后一张图片的显示和开头图片的显示是一样的 index = 1; }else{ index ++; } } // 下标减少; function reduce(){ prev = index; if( index === 0 ){ wrapper.style.left = -(slides.length - 1) * 1130 + "px"; index = slides.length - 2; }else{ index --; } } // 根据我们的算法去实现动画效果; function bannerAnimate(){ animate( wrapper , { left : - index * 1130 }); // 给对应的分页器按钮添加active; // 先去清空所有的类名; bullets.forEach( function( ele ){ ele.classList.remove("active") }) // 下标需要进行特殊处理,在显示最后一张图片的时候,给第0个按钮添加active; bullets[ index === 5 ? 0 : index ].classList.add("active"); } bindEvent(); var interval = null; function autoPlay(){ // 间隔3s,让js点击一下下一页按钮; interval = setInterval( function(){ // 虚拟点击 : next_btn.dispatchEvent( new Event("click")); } , 3000 ) } function stop(){ clearInterval( interval ) } autoPlay(); </script><div></div> <div></div>![]()
![]()
![]()
![]()
![]()
![]()
, 웹 프론트엔드
위 내용은 단일 DOM 요소에 애니메이션을 추가하는 방법에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
