Fade In And Out 看看淡入淡出效果
{/if}我们可以通过优雅的过渡动画效果进入和离开DOM来吸引客户,svelte通过transition指令让这个问题变得简单起来。
正常我们想要做一个元素的显示与隐藏,可以这样
{#if visible}
Fade In And Out 看看淡入淡出效果
{/if}
但实现后我们发现,这个突然出现和突然消失的效果太过生硬了,因此我们可以设置一些动画,看起来更柔和舒服一些,所以我们可以将上述代码做如下更改
..
import { fade } from 'svelte/transition' // 引入动画库中具体的动画效果
// 在使用的标签上面增加transition:[动画效果]
Fade In And Out 看看淡入淡出效果
- 1
- 2
- 3
1.3 接收参数 ...
transition函数可以接受参数,我们可以切换一个可以接受参数的动画效果fly。这个fly效果就是在离开的时候,根据设置,向y轴方向移动并慢慢消失,出现时从离开的位置慢慢出现
import { fly } from 'svelte/transition'
{y: 100, duration: 2000}}>Fade In And Out 看看淡入淡出效果
- 1
- 2
1.4 出入动画 in:[动画效果] out:[动画效果]
刚刚我们上述没有区分进行设置,动画在in和out时是可以执行不同的动画效果的,我们可以指定其中的一个或者两个。
- transition:[动画效果] in和out都执行这个动画
- in:[动画效果] 在出现/进入时执行这个动画效果
- out:[动画效果] 在消失/离开时执行这个动画效果
import { fade, fly } from 'svelte/transition'
{y: 100, duration: 2000}} out:fade>Fade In And Out 看看淡入淡出效果
- 1
- 2
- 3
2. 自定义CSS过渡
我们可以像官方示例一样封装一个动画效果。在动画进入时绑定了一个spin
的效果,由于spin是我们自定义的效果,所以我们需要定一个spin函数,接收两个参数,node当前DOM和options配置。之后在函数中对接收到的参数进行处理,就可以得到我们想要的动画效果啦
{#if visible}
transitions!
{/if}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- css函数:接收一个时间参数,返回的内容是动态的根据t来进行计算的内联样式
- hsl()函数:使用色相、饱和度、亮度来定义颜色,这样随着时间的变化,文字的内容就会各种颜色进行变换达到一个炫酷的效果
- ~~: 相当于Math.floor()
3. 自定义JS过渡
虽然通常我们应该尽可能多的使用CSS进行过渡,但是如果不借用JavaScript,有些效果是无法实现的。以下官网示例:逐字打印
{#if visible}
The quick brown fox jumps over the lazy dog
{/if}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
4. 过渡事件
了解过渡的开始和结束会很有用,Svelte调度监听事件,像监听其他任何DOM事件一样
- on:introstart=fn 动画进入开始时执行该函数
- on:introend=fn 动画进入结束时执行该函数
- on:outrostart=fn 动画离开开始时执行该函数
- on:outroend=fn 动画离开结束时执行该函数
status: {status}
{#if visible}
{ y: 188, duration: 2000}}
on:introstart="{() => status = 'intro start'}"
on:introend="{() => status = 'intro end'}"
on:outrostart="{() => status = 'outro start'}"
on:outroend="{() => status = 'outro end'}"
>
动画效果进出
{/if}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
5. 局部过渡
无论是添加或销毁任何标签容器,过渡动画都会在标签上进行播放。单个列表项的过渡效果影响到切换整个列表,以致切换可见性时也有过渡效果。如果我们只是想在列表项新增或删除时出现过渡效果,在显示和隐藏时不使用动画效果,可以通过局部(local)过渡来实现该功能。
{#if showItems}
{#each items.slice(0, i) as item}
{item}
{/each}
{/if}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
6. 延时过渡
svelte过渡引擎其中一项特别强大的功能就是可以设置延时过渡,以便多个效果之间协调。
- 引入函数,并定义动画函数
import { quintOut } from 'svelte/easing'; import { crossfade } from 'svelte/transition' const [send, receive] = crossfade({...
- 在标签中绑定动画效果
in:receive="{{key: todo.id}}" out:send="{{key: todo.id}}"
e.which === 13 && add(e.target)}>
待办项
{#each todos.filter(t => !t.done) as todo (todo.id)}
{/each}
已办
{#each todos.filter(t => t.done) as todo (todo.id)}
{/each}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
7. 示例中新知识
7.1 左移运算符 <<
- 2 << 3
- 左边的2转成二进制 10
- 左移3位后变为 10000
- 转成十进制是16
7.2 user-select 是否能选取元素的文本
在web浏览器中,如果您在文本上双击或者鼠标左键滑动,文本会被选取或高亮显示。user-select属性用于阻止这种行为。
- user-select:none; CSS写法
- object.style.userSelect=“none”; JS写法
- user-select可选值:
- auto: 默认。如果浏览器允许,则可以选择文本
- none:防止文本可被用户选取
- text:文本可被用户选取
- all:单击选取文本,而不是双击
7.3 text-indent
首行文本缩进
7.4 Math.sqrt
返回一个数的平方根
- Math.sqrt(4) -> 2
7.5 css中hsl函数
HSL 即色相、饱和度、亮度(英语:Hue, Saturation, Lightness)。
- 色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。 定义色相 (0 到 360) - 0 (或 360) 为红色, 120 为绿色, 240 为蓝色
- 饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取 0-100% 的数值。定义饱和度; 0% 为灰色, 100% 全色
- 亮度(L),取 0-100%,增加亮度,颜色会向白色变化;减少亮度,颜色会向黑色变化。定义亮度 0% 为暗, 50% 为普通, 100% 为白
7.6 display: grid;网格布局
7.6.1 网格布局简介
-
Grid布局将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。与Flex布局有一定的相似性,都是可以指定容器内部多个项目的位置。但是它们之间也存在差异。
-
Flex布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid布局则是将容器划分成行和列,产生单元格,然后指定项目所在的单元格,可以看作是二维布局。Grid布局远比Flex布局强大。
-
display: grid; // 指定容器采用网格布局
-
默认情况下容器元素都是块级圆度,也可以设成行内元素
-
display: inline-grid;
-
设为网格布局以后,容器子元素(项目)的float
display:inline-block
display:table-cell
vertical-align
和 columb-*
等设置都将失效。
-
容器,网格的最外层元素。项目,容器的顶级子元素
7.6.2 容器属性-列宽行高grid-template-columns/grid-template-rows
容器指定了网格布局以后,接着就要划分行和列
- grid-template-columns: 100px 200px 80px 20px; // 每一列的列宽,同时容器被自动划分成对应数据个数列。
- grid-template-rows: grid-template-rows: 60px 80px 60px; // 每一行的行高,若共计四行,只设置三个行高值,则第四个元素默认初始行高。
- 上述列宽和行高,除了使用绝对单位px,也可使用百分比方式。
7.6.2.1 设置行高列宽时可用函数
- repeat(): 有时重复写同样的值非常麻烦,尤其是网格较多时,此时可使用repeat函数,简化重复某个值或某种模式(重复多个值)。
- repeat(num, a b c …) 将后面a b c设置的值重复num次
- grid-template-columns: repeat(4, 100px 200px); // 八列,交替100 200
- grid-template-rows: repeat(2, 33%); // 两行,分别占总高的33%
- auto-fill: 有时单元格的大小是固定的,但是容器的大小不确定。如果希望每一行或每一列容纳尽可能多的单元格,此时可使用auto-fill关键词表示自动填充。
- grid-template-columns: repeat(auto-fill, 100px); 均匀单元格,一行尽可能放更多的列
- fr 片段:用于表示比例关系,如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。
- grid-template-columns: 1fr 2fr 3fr 1fr; // 将一行分开,四列按比例排放
- grid-template-columns: 1fr 800px 3fr 1fr; // 将一行分开,第二列800宽,剩余宽度按比例排放
- minmax(): 产生一个长度范围,表示长度就在这个范围之中。
- grid-template-columns: 1fr 1fr minmax(100px, 2fr) 3fr; // 表示该列最小宽度100px,最大宽度 2fr
- auto: 表示由浏览器自己决定长度
- grid-template-columns: 100px auto 200px; // 除非设置min-width大于最大宽度,否则第二列基本等于该单元格额最大宽度。
7.6.2.2 网格线的名称
grid-template-columns 属性和 grid-template-rows属性里面还可以使用方括号,指定每一根网格线的名字,方便后续的引用
grid-template-columns: [c1] 100px [c2] 120px [c3] auto [c4];
grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
- 1
- 2
上述代码指定网格布局为3行 X 3列,所以有4根垂直网格线和4根水平网格线。[]内为这八根线的名字。网格布局中同一根线可以有很多个名字,比如[fifth-line row5]
7.6.3 容器属性-行/列间距 row-gap/column-gap/gap
- grid-row-gap: 10px; // 行间距 行与行之间存在,不像margin,需要将last-child设为0
- grid-column-gap: 8px; // 列间距 列与列之间存在,同上行
- grid-gap: 10px 20px; // 行间距和列间距合并。前面行间距 后面列间距。若省略了第二个值,则默认第二个值等于第一个值。
根据最新标准,上面三个属性名的grid-前缀已经删除,grid-column-gap和grid-row-gap写成column-gap和row-gap,grid-gap写成gap。
7.6.4 容器属性-grid-template-area定义区域
网格布局允许指定“区域”,一个区域由单个或多个单元格组成。这个区域可以配合class属性、grid-area一起指定某个区域应该展现什么样式
A
B
C
D
E
F
G
H
I
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
我们将对应的area设置成a b c可能语义化并不是很明确,也可以这样设置
grid-template-areas: "header header header"
"main main sidebar"
"footer footer footer";
- 1
- 2
- 3
grid-template-areas: 'a . c'
'd . f'
'g . i';
- 1
- 2
- 3
中间列为点,表示没有用到该单元格,或者该单元格不属于任何区域。
注意,区域的命名会影响到网格线。每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end。比如,区域名为header,则起始位置的水平网格线和垂直网格线叫做header-start,终止位置的水平网格线和垂直网格线叫做header-end。
7.6.5 容器属性-grid-auto-flow 内容放置顺序
划分网格后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是“先行后列”,也可以通过该属性的设置,先列后行。
- grid-auto-flow: row; // 默认情况,先行后列排放,即一行一行放,此时根据列宽位置的设置,决定几列,然后将内容换算成对应的行。
- grid-auto-flow: column; // 先列后行排放,一列一列放,此时根据设置行高的数量决定一共有多少行,然后将内容放置对应行数后生成对应的列
- grid-auto-flow: column dense;
- grid-auto-flow: row dense;
7.6.6 容器属性-justify-items/align-items/place-items单元格内容放置位置
align-items 设置单元格内容的垂直位置(上中下)
justify-items 设置单元格内容的水平位置(左中右)
place-items:
若不设置第二个值,默认与第一个值相等
- start: 对齐单元格的起始边缘
- end:对齐单元格的结束边缘
- center:单元格内部居中
- stretch:拉伸,占满整个单元格的整个宽度
7.6.7 容器属性-justify-content/align-content/place-content整个内容区域在容器里面的位置
整个内容区域 -> 指的是表格形成区域
容器 -> 指的是container这个容器,若设置宽高800X800 但表格区域不一定会占满
justify-content 整个内容区域在容器里面的水平位置
align-content 整个内容区域在容器垂直位置
place-content:
省略第二个值等于第一个值
- start 对齐容器的起始边框
- end 对齐容器的结束边框
- center 容器内部居中
- stretch 项目大小没有指定是,拉伸占据整个网格容器
- space-around 每个项目两侧的间隔相等。所以项目之间的间隔比容器边框的间隔大一倍。与flex中的这个属性定义相同
- space-between 项目与项目之间的间隔相等,项目与容器边框之间没有间隔
- space-evenly 项目与项目之间的间隔相等,项目与容器边框之间也是同样长度的间隔
7.6.8 容器属性-grid-auto-columns/grid-auto-rows超出指定网格的样式
例如我们定义了3X3网格,那么在第四行或第四列时样式就会变成默认的,此时我们可以通过这两个属性进行定制化
- grid-auto-rows: 100px;
- grid-auto-columns: 200px;
7.6.9 容器属性-grid-template/grid合并属性
- grid-template 是grid-template-columns、grid-template-rows和grid-template-area这三个属性的合并简写形式
- grid是grid-template-rows、grid-template、grid-template-area、grid-auto-rows、grid-auto-columns、grid-auto-flow这六个属性合并的简写形式
7.6.10 项目属性-grid-column-start/grid-column-end/grid-row-start/grid-row-end 指定项目位置
给某个具体的项目设置这几个值,可以指定为第几条网格线,还可以指定为网格线的名字
- 指定第几条网格线
.first-project { // class为first-project的项目
grid-column-start: 2; // 列 第二条竖线 // 两条竖线合并处算一条
grid-column-end: 4; // 列 第四条竖线
grid-row-start: 3; // 行 第三条横线 // 两条横线合并出算一条
grid-row-end: 4; // 行 第四条横线
}
- 1
- 2
- 3
- 4
- 5
- 6
- 指定网格线的名字
.container {
display: grid;
grid-template-columns: [a] 100px [b] 200px [c]300px [d];
grid-template-rows: [a1] 200px [b1] 100px [c1] 50px [d1];
}
.first-project {
grid-column-start: a;
grid-column-end: d;
grid-row-start: b1;
grid-row-end: c1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
使用这四个属性,如果产生了项目的重叠,则可以使用z-index属性指定项目的重叠顺序。
7.6.11 项目属性-grid-column/grid-row
- grid-column 是grid-column-start和grid-column-end合并简写
- grid-row 是 grid-row-start和gird-row-end合并简写形式
7.6.12 项目属性-grid-area 执行项目放在哪一个区域
- grid-area: e; // 放在某个具体的位置
- grid-area:
/ / /
;
7.6.13 justify-self/align-self/place-self单元格内容位置
justify-self 设置单元格内容的水平位置
align-self 设置单元格内容的垂直位置
place-self:
; // 若只写一个值,则默认第二个值与第一个相等
- start 对齐单元格的起始边缘
- end 对齐单元格的结束边缘
- center 单元格内部居中
- stretch 拉伸,占满整个单元格的默认宽度
官方文档
如果有用,点个赞呗~
总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~
-
相关阅读:
使用html+css实现一个静态页面【传统文化茶带音乐6页】HTML学生个人网站作业设计
【大数据分布并行处理】实验测试(一)
文件的操作
基于JSP+Bootstrap+MySQL的“我与家乡”网页设计
有哪些好用的性能测试工具推荐?性能测试报告收费标准
#Z0045. S数
《痞子衡嵌入式半月刊》 第 58 期
java计算机毕业设计基于springboo+vue的订餐外卖点餐平台管理系统
Java8新特性之Lambda表达式
Ribbon的随机算法,为什么能难倒这么多的微服务专家?
-
原文地址:https://blog.csdn.net/weixin_44593720/article/details/125892883