目录

  • 一、CSS动画
    • (一)2D动画
    • (二)transition过渡动画
    • (三)animation动画
    • (四)3D动画
  • 二、jQuery
    • (一)基础用法
      • (1)网页中的使用
      • (2)jQuery使用方法
    • (二)eq和get方法
      • (1)eq()方法
      • (2)get()方法
    • (三)事件
      • (1)使用事件属性
      • (2)使用事件监听器
      • (3)解绑事件
  • 三、canvas画布
    • (一)基础简介
      • (1)创建canvas标签
      • (2)给canvas标签设置 width height 属性
      • (3)通过js获取canvas标签
      • (4)通过canvas标签获取context画布上下文(画布对象)
      • (5)通过context绘制画布
    • (二)绘制
      • (1)绘制矩形
      • (2)绘制文本
      • (3)绘制线
      • (4)绘制图片
  • 四、多媒体标签
    • (一)视频标签(video)
    • (二)音频播放器(audio)
    • (三)使用Audio类名创建
    • (四)数据源标签(source)
    • (五)自定义控制器
    • (六)滑块
    • (七)图片标签(picture)

一、CSS动画

(一)2D动画

CSS的2D转换
CSS 转换(transforms):可以移动、旋转、缩放和倾斜元素。
平移 translate()
translate()方法是将元素从当前位置开始平移
第一个参数 水平平移量 右为正方向
第二个参数 竖直平移量 下为正方向

transform: translate(-50px, -50px);
transform: translateX(300px);
transform: translateY(200px);
transform: translateZ(50px);//translateZ:电脑屏幕向外移动

旋转 rotate()
参数:可以是角度值 (deg) 也可以是弧度值 (rad) 弧度制的PI = 180°
沿轴进行顺时针旋转为正方向,0°代表竖直向上
负数的含义其实就是 360 - 对应度数
默认旋转函数rotate 是沿着z轴进行旋转
缩放 sacle()
参数:比率 1 为原本大小
scale 写负数代表反向:
倾斜 skew()

transform: skew(30deg);
transform: skew(0deg, 30deg);
transform: skewX(30deg);
transform: skewY(30deg);

matrix() 方法
matrix() 方法把所有 2D 变换方法组合为一个。
matrix() 方法可接受六个参数,其中包括数学函数,这些参数使您可以旋转、缩放、移动(平移)和倾斜元素。
参数如下:matrix(scaleX(),skewY(),skewX(),scaleY(),translateX(),translateY())

div {transform: matrix(1, -0.3, 0, 1, 0, 0);
}

transform也可以直接同时赋值多个值

.box {width: 200px;height: 200px;background-color: red;transform: translateX(100px) rotate(45deg) scale(0.5);
}

变化原点
设置transform的原点
原点的位置会影响旋转的圆心,缩放的位置
待选值: top bottom left right center 还可以填入像素值
第一个参数代表水平偏移量 第二个参数代表竖直偏移量

transform-origin: right center;
transform-origin: center bottom;

当值为像素值的时候,像素值的参考位置是元素的左上角

transform-origin: 20px 70px;

(二)transition过渡动画

过渡名称
还有两个待选项
​ none: 无
​ all: 所有属性都能播放过渡动画

transition-property: left, transform;
transition-property: all;

过渡时长
动画播放的时长

transition-duration: 2s;

过渡速度
动画播放的速度曲线
待选项
​ linear: 匀速直线运动
​ ease-in: 慢进
​ ease-out: 慢出
​ ease-in-out: 慢进慢出
​ cubic-bezier: 曲线函数

transition-timing-function: linear;

过渡延迟

transition-delay: 3s;

合成所有属性
语法:transition: property duration timing-function delay;

transition: all 3s linear 3s;

(三)animation动画

动画帧序列

@keyframes move{//起始帧from{transfrom:translateX(0px);}//可以用百分比来代表动画的中间状态50%{transfrom:translateX(600px)}//结束帧to{transform:translateX(300px);}
}

动画属性
动画animation必须包含,名称和时长两个属性,才会进行播放

以下属性可以和transition一起记忆

  • 动画名称:animation-name:move;
  • 动画播放时长:animation-duration:3s;
  • 动画播放的速度曲线:animation-timing-function:linear;
  • 动画延迟:animation-delay:3s;

以下属性为animation独有的属性

  • 动画迭代次数:animation-iteration-count:1; //infinite 无限次
  • 动画播放方向:animation-direction:normal;
    normal:顺向播放
    reverse:反向播放
    alternate:来回播放
    alternate-reverse:反向来回播放
  • 动画填充模式:animation-fill-mode:forwords
    ​ forwards:保留结束帧的状态
    ​ backwards:保留起始帧的状态
    ​ both:保留初始和结束时的值
  • 动画播放和暂停状态:animation-play-state:
    pause:暂停
    running:继续

复合属性

  • 官方顺序
    duration | name
    animation:2s move;
    duration | timing-function | delay | name
    animation:2s linear 3s move;
    duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name
    animation:
  • 一般顺序(参考transition)
    animation:move 3s linear 3s forwards
    动画播放和暂停
    动画播放和暂停状态:animation-play-state:
    pause:暂停
    running:继续
 btn.addEventListener('click', () => {box.style.animation = 'move 1s linear forwards infinite alternate running'})btn2.addEventListener('click', () => {// animationPlayState 动画播放状态// paused 暂停// running 播放if (box.style.animationPlayState === 'paused') {box.style.animationPlayState = 'running'} else {box.style.animationPlayState = 'paused'}})

(四)3D动画

创建一个场景
搭建3d场景,在父元素上设置:transform-style: preserve-3d;
设置透视距离

perspective: 300px;

若三维场景中不添加 perspective 则三维场景是一个正交视图
设置透视原点

perspective-origin: center center;

透视原点(灭点所在的坐标)
原点为 0 值时,所在位置是scene的左上角:perspective-origin: 0 0;
在场景里添加子元素

    <!-- 创建一个场景,用来显示三维图形 --><div class="scene"><!-- 给三维空间中添加三维元素 --><div class="box"></div></div>

在子元素上使用3d变换

transform: rotateY(65deg);

二、jQuery

(一)基础用法

(1)网页中的使用

<!DOCTYPE html>
<html><head></head><body></body><!-- 通过脚本形式进行引入 --><script src="./jquery.min.js"></script><script>// 在引入jquery后,此处就可以使用jquery的功能了</script>
</html>

(2)jQuery使用方法

1.查询并存储元素
2.操作元素,包括修改元素样式,绑定事件等

使用$()函数获取一个jQuery对象
jQuery对象的变量名,一般以$开头

let $box=$('.box')

jQuery对象看上去像一个数组,其中数组成员就是dom对象

console.log($box)

给元素修改样式

$box.css('height','100px')
$box.css('background-color','#f00')

jQuery对象的函数总是返回自己

所以可以进行链式调用

$box.css('height','100px').css('background-color','#f00').css('color','#f0f').text('hello word')

(二)eq和get方法

(1)eq()方法

eq 读取对应索引位置的jQuery对象

let $li=$lis.eq(1)

因为$li是jQuery对象,所以可以直接使用jQuery操作它

$li.css('color','#f00')

(2)get()方法

get 读取对应索引位置的dom对象

let li = $lis.get(2)
li.style.color = '#f00'

使用 [] 方括号的方式去获取索引对应的 dom 对象

其结果等价于 get 函数获取的结果

let li = $lis[2]
li.style.color = '#f00'

(三)事件

(1)使用事件属性

绑定事件
和dom对象绑定事件进行类比

    // 对应 jquery 的写法如下$btn.click(ev => {console.log('click');// ev 是jquery封装的事件对象console.log(ev);})// 再例如$btn.mousemove(ev => {console.log('mousemove');})

触发事件

    // 可以直接使用事件对应的函数去触发事件,例如:$btn.click()$btn.mousemove()

(2)使用事件监听器

绑定事件

    const handler = ev => {console.log(ev);console.log(1);}// 绑定事件$btn.on('click', handler)$btn.on('mousemove', ev => {console.log(ev);console.log(2);})

绑定一次性事件

    // 绑定一次性事件$btn.one('click', ev => {console.log(ev);console.log('one');})

(3)解绑事件

    // 解绑指定事件处理程序//$btn.off('click', handler)// 解绑所有事件处理程序$btn.off('click')

三、canvas画布

(一)基础简介

(1)创建canvas标签

<canvas></canvas>

(2)给canvas标签设置 width height 属性

//width height 属性可以设置画布的像素大小
//width="800" 就意味着画布水平有800个真实像素
<canvas width="400" height="300"></canvas>
canvas {border: 3px solid #000;/*样式的宽高也可以设置canvas标签的大小,但不是真实的像素值而是拉伸后的大小*/width: 800px;height: 600px;
}

(3)通过js获取canvas标签

const canvas = document.querySelector('canvas')

(4)通过canvas标签获取context画布上下文(画布对象)

const ctx = canvas.getContext('2d')

(5)通过context绘制画布

//绘制一个实心矩形
ctx.fillRect(100, 50, 100, 100)

颜色修改
fillStyle 可以修改所有使用fill的函数所填充的颜色
strokeStyle 可以修改所有stroke函数的描边颜色

(二)绘制

(1)绘制矩形

实心矩形
语法:ctx.fillRect(x, y, w, h)
x:水平坐标 y:竖直坐标 (坐标原点在canvas左上角)
w:矩形宽度 h:矩形高度

//修改颜色
ctx.fillStyle = '#f00'
ctx.fillRect(50, 100, 150, 50)

镂空矩形
语法:ctx.strokeRect(x, y, w, h)
x:水平坐标 y:竖直坐标 (坐标原点在canvas左上角)
w:矩形宽度 h:矩形高度

ctx.strokeRect(300, 100, 200, 100)

清空矩形
用于清空画布

ctx.clearRect(0, 0, 800, 600)

(2)绘制文本

实心文字
语法:ctx.fillText(text, x, y, max-width)
text: 要渲染的文本
x,y: 文本渲染的坐标位置
max-width: 文本最大宽度,当大于该宽度,文本字体将自动缩小以自适应宽度

ctx.fillText('祖国万岁!!', 200, 100, 100)
//最后一个参数可省略
ctx.fillText('祖国万岁!!', 200, 100)

镂空文字
参数和实心文本相同

ctx.strokeText('祖国万岁!!', 200, 300)

(3)绘制线

画直线
设置颜色和线宽

ctx.strokeStyle = '#ff0'
ctx.lineWidth = 15

使用beginPath开启路径(此方法的路径是非封闭的)

ctx.beginPath()

使用moveTo移动笔头,但不会记录路径上的线条

xtx.moveTo()

用线绘制一个点到下一个点

ctx.lineTo()

将路径封闭

ctx.closePath()

显示图形,将路径所包围的图形用纯色来填充

ctx.fill()

将路径用镂空线条进行填充

ctx.stroke()

画弧线

    //每画一个图形开启一次路径ctx.beginPath()ctx.moveTo(400, 400)ctx.lineTo(500, 400)// 角度转弧度的公式: rad = (PI / 180) * deg// 弧线// ctx.arc(x, y, r, start, end)// x: 圆心横坐标// y: 圆心纵坐标// r: 圆半径// start: 起始弧度 0度时的方向为水平向右 顺时针为正方向// end: 结束弧度ctx.arc(400, 400, 100, 0, Math.PI / 180 * 30)ctx.closePath()ctx.fill()// ctx.stroke()

(4)绘制图片

语法

ctx.drawImage(image, dx, dy);
ctx.drawImage(image, dx, dy, dWidth, dHeight);
ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

image: img 标签的 dom 对象
dx dy: 图片在canvas中的坐标
dWidth dHeight: 图片在canvas中的宽高
sx, sy: 参考图片源,截图的坐标
sWidth, sHeight: 截图的宽高
方式一

    const img = document.querySelector('img')const canvas = document.querySelector('canvas')const ctx = canvas.getContext('2d')img.addEventListener('load', () => {// 图片加载完成后 再绘制图片// ctx.drawImage(img, 100, 100)// ctx.drawImage(img, 100, 100, 100, 100)ctx.drawImage(img, 10, 100, 170, 170, 100, 100, 170, 170);})

方式二

    const canvas = document.querySelector('canvas')const ctx = canvas.getContext('2d')// 动态生成图片进行绘图let img = document.createElement('img')img.style.display = 'none'img.src = './img/heihei.png'img.addEventListener('load', ev => {// 绘图ctx.drawImage(img, 10, 100, 170, 170, 100, 100, 170, 170);// 删除图片节点img.remove()})// 插入图片到页面document.body.appendChild(img)

四、多媒体标签

(一)视频标签(video)

宽高(width height)

控制面板(controls)

静音(muted)

自动播放(autoplay):自动播放要配合静音才能实现

媒体源(src)

预载模式(preload)

循环(loop)

海报(poster):video特有

(二)音频播放器(audio)

由于audio和video都属于HTMLMediaElement的实例

所以audio的所有使用方法和video一样

可以通过 instanceof 来判断一个对象是否是某个类型的实例

video instanceof HTMLMediaElement

属性
宽高(width height):没意义

控制面板(controls)

静音(muted)

自动播放(autoplay):自动播放要配合静音才能实现,但是没意义

媒体源(src)

预载模式(preload)

循环(loop)

(三)使用Audio类名创建

    // 可以使用 Audio 类名来创建 audio 标签// let audio = new Audio()// audio.src = './audio/a4.mp3'// audio.play()

(四)数据源标签(source)

audio和video都可用

source 标签若有多个,那么浏览器会从上至下加载直到某一个被加载成功为止

    <audio controls><!-- 数据源标签 --><source src="./audio/a44.mp3"><source src="./audio/b44.mp3"><source src="./audio/c4.mp3"></audio>

(五)自定义控制器

    <div><button class="play">播放</button><button class="pause">暂停</button>当前时间:<span class="current-time"></span>总时间:<span class="total-time"></span><input class="inp" /><button class="go-to">跳转到此时间</button><button class="v-up">音量+</button><button class="v-down">音量-</button><button class="muted">静音</button></div>
    let video = document.querySelector('video')let playBtn = document.querySelector('.play')let pauseBtn = document.querySelector('.pause')let totalTime = document.querySelector('.total-time')let currentTime = document.querySelector('.current-time')let inp = document.querySelector('.inp')let goToBtn = document.querySelector('.go-to')let vUpBtn = document.querySelector('.v-up')let vDownBtn = document.querySelector('.v-down')let mutedBtn = document.querySelector('.muted')let timer
    // 播放playBtn.addEventListener('click', () => {video.play()// 显示总时长// textContent 标签体的文本内容// duration 代表媒体时长,单位: 秒totalTime.textContent = video.durationcurrentTime.textContent = video.currentTimeclearInterval(timer)timer = setInterval(() => {// currentTime 代表当前播放的时间currentTime.textContent = video.currentTime}, 1000)})// 暂停pauseBtn.addEventListener('click', () => {video.pause()})// 跳转进度goToBtn.addEventListener('click', () => {let currentTime = Number(inp.value)// 直接赋值 video 的 currentTime 就可以跳转进度video.currentTime = currentTime})// 音量+vUpBtn.addEventListener('click', () => {// volume 是一个 0~1 的数字 用于控制音量video.volume = video.volume + 0.1 > 1 ? 1 : video.volume + 0.1})// 音量-vDownBtn.addEventListener('click', () => {// volume 是一个 0~1 的数字 用于控制音量video.volume = video.volume - 0.1 < 0 ? 0 : video.volume - 0.1})// 静音mutedBtn.addEventListener('click', () => {video.muted = !video.muted})

(六)滑块

<input type="range" min="0" max="100" step="20" value="0"><span class="range-value">0</span>
    let inputRange = document.querySelector('input[type=range]')let rangeValue = document.querySelector('.range-value')inputRange.addEventListener('input', () => {rangeValue.textContent = inputRange.value})

(七)图片标签(picture)

    <picture><!-- source 标签中有多个待选项时,使用srcset规定资源路径 --><!-- media 设置媒体查询 --><!-- 媒体查询的顺序由大到小 --><source srcset="./img/1.png" media="(min-width: 800px)"><source srcset="./img/2.png" media="(min-width: 600px)"><img width="500" src="./img/desktop.png"></picture>

【前端】移动互联动画相关推荐

  1. 前端实现lottie动画

    前端实现lottie动画 ul通过AE生成的json文件 ,前端通过lottie实现动画简单快捷 <div class="box"></div> 引入 &l ...

  2. html如何实现过渡效果,前端如何实现动画过渡效果

    简介 动画这个概念非常宽泛,涉及各个领域,这里我们把范围缩小到前端网页应用层面上,不用讲游戏领域的Animate,一切从最简单的开始. 目前大部分网页应用都是基于框架开发的,比如Vue,React等, ...

  3. 魔幻粒子、火焰动画、纯前端实现魔幻粒子、纯前端实现火焰动画

    魔幻粒子.火焰动画.纯前端实现魔幻粒子.纯前端实现火焰动画 火焰动画,这次我们给大家带来另外一款基于HTML5 Canvas的火焰动画,你可以在Canvas画板上用鼠标点击拖动,便会形成雾状的火焰效果 ...

  4. 前端实现ppt动画播放(H5+C3+JS+JQ)

    大家都应该用过ppt(Microsoft PowerPoint 2010)来做过一些可课件或者动画效果吧,其实,在ppt里面的动画在网页上也可以实现的,并且会更加炫酷.可以自己找个动画ppt来动动手实 ...

  5. 前端进度条动画(自定义颜色)

    前端进度条动画(自定义 代码如下(示例): <template><view class="flex-cen"><view class="pr ...

  6. 前端笔记:动画介绍与CSS动画说明

    文章目录 目的 动画介绍 CSS动画 JavaScript动画 Canvas动画 SVG动画 CSS动画 CSS Transition CSS Animation timing-function CS ...

  7. 小猿圈自学web前端之CSS3动画练习案例:用CSS3做个钟表

    前段时间发的五子棋的游戏很多小伙伴都私聊让再做个,今天小猿圈web前端讲师为大家分享的是CSS3动画练习案例:用CSS3做个钟表,想玩的小伙伴记得自己运行一下呦. 自学CSS3属性之后,我们来用一个小 ...

  8. 前端逐帧动画性能探究和比较

    什么是逐帧动画? 首先看一下维基百科中的定义: 定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果. 简单的来说就是: 以一定的速度切换几张连续图像,让它动起来 ...

  9. 前端加载动画/加载等待动画

    在加载前端的数据的时候,很多时候不能用进度条来衡量不定数据量.此时加载动画就有用武之地了.可以在数据请求时显示加载动画,等动画加载完成再隐藏加载动画,让前端更具交互友好性. 网上百度了很多关于这方面的 ...

最新文章

  1. pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程
  2. [Contest20170910]string
  3. 35.页面置换算法有哪些?
  4. 视频直播 > 最佳实践 > 如何降低延时
  5. 做了十年的功能测试,下一步该晋升测试开发还是转行软件开发?
  6. surface simplification using quadratic error metrics
  7. 虽然保持了连续代码生产量但是仔细想想也没什么必要
  8. SecureCRT在linux与windows本地互传文件之SFTP
  9. sqlmap详细使用教程
  10. EVE上传Dynamips、IOL镜像
  11. 解决MyEclipse中导入项目的javascript文件中文乱码
  12. SuperMap iDesktopX安装 ---(保密机:龙芯CPU+银河麒麟系统)
  13. 【Javaweb】基础开发流程与介绍
  14. Day134-136.尚品汇:平台属性接口、SPU、跨域问题、配置持久化、MinIO 分布式文件存储系统
  15. NAT穿越(NAT-T)原理
  16. python怎么读excel_python怎么读写excel文件
  17. docker desktop 运行mysql
  18. 在10万以内的一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
  19. qq邮件引流需要注意什么?QQ邮件群发推广的技巧
  20. 【转帖】中国芯暗流涌动,龙芯/飞腾都在走什么样的路

热门文章

  1. 计算机每年学硕和专硕数量,重磅:2019年研究生招生数据报告,专硕报考人数超过学硕?...
  2. 智汇云校携手院校组织数千学生参加“2020华为中国大学生ICT大赛”
  3. java导出doc文档
  4. 腾讯投资“差评”遭舆论讨伐,或被迫退股!!
  5. poj 2683 Ohgas' Fortune 利率计算
  6. 上亿会员 为b站会员购众筹项目打下消费基础
  7. 手写简易版Vue源码之数据响应化的实现
  8. sharding-jdbc系列之常见问题(十四)
  9. 杂记二 · 永远不服输
  10. Python 三大利器:迭代器、生成器、装饰器