抖音资讯

douyinzx

html动画效果代码(html网页制作动态效果)

iseeyu2年前 (2024-05-05)抖音资讯160

主要利用CSS3-animation + JS实现效果,只是提供思路,具体细节可以参考
实现效果:

 


css3-animation属性,可实现动画效果,如下:
 

[CSS] 纯文本查看 复制代码

?

.demo{

animation: 动画1,动画2;

}
上面可以实现动画效果,但是不可控制,只能自动播放,于是看下面:
 

[JavaScript] 纯文本查看 复制代码

?

// 灵动岛对应dom

const box = document.querySelector(".demo");

// 以类名定义所有动画类型,以类名切换,实现动画切换

const animationList = ["longer", "divide", "fusion", "bigger"];

box.addEventListener("click", () => {

box.classList.add(animationList[index]);

});

let index = 0;

// 每一个动画结束都会触发此事件(包括子元素及不同属性的动画结束时)

box.addEventListener("animationend", (e) => {

if (

e.animationName === "divide-right" ||

e.animationName === "fusion-right"

) {

return;

}

index++;

setTimeout(() => {

if (index <= animationList.length - 1) {

box.classList.add(animationList[index]);

} else {

index = 0;

}

}, 800);

});
JS控制动画的三种方式:
1.直接覆盖 animation

[CSS] 纯文本查看 复制代码

?

1

box.style.animation = `longer 800ms ease-in-out`;
如果动画效果较多,那就写的比较长了,建议封装CSS类,通过切换CSS类名实现动画效果


2.通过切换CSS类名,上面说过了,把不同动画封装在不同类里面,直接切换
 

[CSS] 纯文本查看 复制代码

?

1

box.classList.toggle('longer');
3.animationPlayState属性
 

[CSS] 纯文本查看 复制代码

?

 

1

2

box.style.animationPlayState="paused"

// runing播放,paused暂停。

 


但是只支持单动画播放


动画结束后如何让界面停留在结束时的状态呢?
 

[CSS] 纯文本查看 复制代码

?

 

1

animation-fill-mode:forwards;

 


完整代码:
 

[HTML] 纯文本查看 复制代码

?

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8" />

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

<title>灵动岛</title>

<style>

* {

margin: 0;

padding: 0;

}

#iphone14pro {

position: relative;

margin: auto;

width: 974px;

height: 876px;

overflow: hidden;

background-image: url([img]https://www.qcodes.cn/wp-content/uploads/2022/09/2022091405393859.png[/img]);

}

.demo {

width: 320px;

margin-top: 72px;

margin: 72px auto 0;

background-color: red;

height: 80px;

border-radius: 40px;

background-color: #272729;

position: relative;

}

.demo::after {

position: absolute;

content: " ";

right: 0;

width: 80px;

height: 100%;

border-radius: 80px;

background-color: #272729;

}

/* 变长 */

.longer {

animation: longer 800ms ease-in-out forwards;

}

@keyframes longer {

0% {

}

60% {

width: 50vw;

}

80% {

transform: scaleX(1.04);

}

100% {

transform: scaleX(1);

width: 50vw;

}

}

/* 分离 */

.divide {

animation: divide-left 800ms ease-in-out forwards;

}

@keyframes divide-left {

0% {

}

40% {

transform: scaleX(1.1);

}

 

100% {

transform: scaleX(1);

}

}

.divide::after {

animation: divide-right 800ms ease-in-out forwards;

}

@keyframes divide-right {

0% {

}

40% {

transform: scaleX(1.1);

}

 

100% {

transform: scaleX(1);

right: -100px;

}

}

/* 融合 */

.fusion {

animation: fusion-left 800ms ease-in-out forwards;

}

@keyframes fusion-left {

0% {

}

40% {

transform: scaleX(1.1);

}

 

100% {

transform: scaleX(1);

}

}

.fusion::after {

animation: fusion-right 800ms ease-in-out forwards;

}

@keyframes fusion-right {

0% {

right: -100px;

}

40% {

transform: scaleX(1.1);

}

 

100% {

transform: scaleX(1);

right: 0;

}

}

/* 变大 */

.bigger {

animation: bigger 800ms ease-in-out forwards;

}

@keyframes bigger {

0% {

}

60% {

width: 81vw;

height: 400px;

border-radius: 100px;

}

80% {

transform: scaleX(1.04);

}

100% {

width: 81vw;

height: 400px;

border-radius: 100px;

transform: scaleX(1);

}

}

.bigger::after {

display: none;

}

</style>

</head>

<body>

<div id="iphone14pro">

<div class="demo"></div>

</div>

<script>

// 灵动岛对应dom

const box = document.querySelector(".demo");

 

const animationList = ["longer", "divide", "fusion", "bigger"];

box.addEventListener("click", () => {

box.classList.add(animationList[index]);

});

let index = 0;

// 每一个动画结束都会触发此事件(包括子元素及不同种类属性的动画)

box.addEventListener("animationend", (e) => {

if (

e.animationName === "divide-right" ||

e.animationName === "fusion-right"

) {

return;

}

index++;

setTimeout(() => {

if (index <= animationList.length - 1) {

box.classList.add(animationList[index]);

} else {

index = 0;

}

}, 800);

});

</script>

</body>

</html>

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/44565.html

相关文章

dou加涨粉是真的假的(抖音投放抖加的作用)

dou加涨粉是真的假的(抖音投放抖加的作用)

  抖音发布视频,如果想在第一时间让更多的人浏览到,可以花钱投放dou+。但是投放的效果是取决于你的视频内容质量的。那投抖+涨粉是真的粉丝吗? 是的 一、经常买抖加对账号有影响吗? 抖音买dou+对自己账号本身是没有影响的,而且dou...

快手美食广告怎么做?三招就能教会你

快手美食广告怎么做?三招就能教会你

快手美食广告怎么做?怎么才能把广告做好?这是每个接到推广任务的美食博主都应思考的问题。当一个美食博主有着稳定的内容输出、达到一定的粉丝数量,打起知名度之后,就可以开始接一些美食广告,可能也会有商家主动来联系博主谈合作。 美食博主就是一些利用网络平台发布美食相关的文章视频等作品的人,作品内容多样,形...

抖音投流优化师、抖音运营

抖音投流优化师、抖音运营

公司理念:摩马艺品是国内原作版画的开拓者,品牌创始人更是致力于名画采集和名画修复已有20余年时间,且与各大知名博物馆、美术馆、出版社、当代艺术名家长期战略合作及交流联动。依托二十余年丰富的图像处理经验和精湛的技术,扎根于原作版画行业,不忘初心,只为将传世经典名画和近现代大师...

怎么看抖音粉丝数量排行榜

怎么看抖音粉丝数量排行榜

本文目录 抖音怎么看粉丝排行?   3、点击【粉丝团点亮】, 4、进入后即可看到加入的粉丝团。 以上就是怎么看抖音粉丝排行。 " 抖音粉丝排行怎么查? 可以用其他软件查,比如得利豆数据,它是重点去做抖音电商数据分析的,包括抖音...

制作配音素材的软件(给视频配音软件推荐)

制作配音素材的软件(给视频配音软件推荐)

应该有很多小伙伴喜欢看电视剧吧?那你们有没有发现剧中的演员有时候嘴巴对不上我们耳朵听出来的声音呢?其实是因为有些演员声音不适合所以会使用配音演员帮忙,但是如果我们普通人想拍摄一部短片,而声音条件也不优秀的时候该怎么办呢?其实可以考虑使用一些辅助工具来完善我们的视频作品。例如使用配音软件,那么你知...

百度广告:生活服务商城(惠生活)商家保证金功能上线

百度广告:生活服务商城(惠生活)商家保证金功能上线

一、 背景说明       生活服务商城部分商家在服务过程中存在乱收费、迟到爽约等违规行为,导致用户投诉及理赔申请,为督促商家提高服务质量,提升入规范商家行为,保证驻商户的优质度,减少行业风险,生活服务业务上线商家保证金功能   二、功能介绍...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片