新增第182个小实例:霁青+翠蓝的Tabbar动画特效

This commit is contained in:
DESKTOP-BM6RJU5\wyanh 2022-08-25 17:07:17 +08:00
parent 3ed4a9ad90
commit 20355c4955
6 changed files with 195 additions and 16 deletions

View File

@ -189,6 +189,7 @@
179. HTML5+CSS3小实例悬停放大图片的旅游画廊
180. HTML5+CSS3+JS小实例使用L2Dwidget实现二次元卡通看板娘
181. HTML5+CSS3+JS小实例Canvas图片滑块拖动验证码
182. HTML5+CSS3+JS小实例霁青+翠蓝的Tabbar动画特效
#### 赞赏作者
![image](https://gitee.com/wyanhui02/html_css_demo/raw/master/images/%E8%B5%9E%E8%B5%8F%E4%BD%9C%E8%80%85/%E8%B5%9E%E8%B5%8F%E7%A0%81.jpg)

View File

@ -45,6 +45,7 @@ var Pagination={
},
// 绑定页码点击事件,并设置当前页样式
Bind:function(){
// console.log(Pagination)
var a=Pagination.e.getElementsByTagName('a');
for(var i=0;i<a.length;i++){
if(+a[i].innerHTML===Pagination.page){

View File

@ -7,8 +7,8 @@
<title>使用L2Dwidget实现二次元卡通看板娘</title>
<style type="text/css">
body{
background: linear-gradient(to top,#ff9a9e,#fecfef);
body {
background: linear-gradient(to top, #ff9a9e, #fecfef);
}
</style>
</head>
@ -21,25 +21,41 @@
<script src="./live2dw/lib/L2Dwidget.min.js"></script>
<script>
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function () {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
var jsonData = null;
readTextFile("./live2dw/live2d-widget-model-shizuku/assets/shizuku.model.json", function (text) {
jsonData = JSON.parse(text);
})
L2Dwidget.init({
model:{
model: {
// 模型
jsonPath:"./live2dw/live2d-widget-model-shizuku/assets/shizuku.model.json",
scale:1 //模型缩放比例
jsonPath: jsonData, //"./live2dw/live2d-widget-model-shizuku/assets/shizuku.model.json",
scale: 1 //模型缩放比例
},
display:{
position:"left", //模型的位置左or右
width:300, //模型宽度
height:600, //模型高度
hOffset:0, //模型水平偏移量
vOffset:-20 //模型垂直偏移量
display: {
position: "left", //模型的位置左or右
width: 300, //模型宽度
height: 600, //模型高度
hOffset: 0, //模型水平偏移量
vOffset: -20 //模型垂直偏移量
},
mobile:{
show:true, //手机端是否显示
scale:1 //缩放比例
mobile: {
show: true, //手机端是否显示
scale: 1 //缩放比例
},
react:{
opacity:1 //模型不透明度
react: {
opacity: 1 //模型不透明度
}
})
</script>

97
code/182/182.css Normal file
View File

@ -0,0 +1,97 @@
*{
margin: 0;
padding: 0;
}
body{
/* 方便演示 居中显示 */
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #e5f9fe;
}
nav{
position: relative;
}
ul{
list-style-type: none;
padding: 0;
background-color: #2193b0;
/* 弹性布局 默认水平排列 */
display: flex;
/* 左下 右下圆角 */
border-radius: 0 0 40px 40px;
/* 阴影 */
box-shadow: 2px 10px 20px #2193b080;
}
li{
width: 160px;
height: 70px;
/* 弹性布局 水平+垂直居中 */
display: flex;
justify-content: center;
align-items: center;
margin: 30px 15px;
}
li:first-child{
margin-left: 30px;
}
li:last-child{
margin-right: 30px;
}
li a{
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
li .fa{
font-size: 44px;
width: 44px;
height: 44px;
color: #6dd5ed;
transform: translateX(30px);
/* 设置过渡 */
transition: 0.4s ease;
}
li .link-text{
color: #fff;
margin-left: 16px;
position: relative;
z-index: 1;
/* 禁止文本被选取 */
user-select: none;
/* 默认隐藏 */
opacity: 0;
/* 过渡 */
transition: 0.3s ease;
}
/* 选中态样式 */
li a.active{
color: #fff;
}
li a.active .fa{
color: #fff;
transform: translateX(0);
}
li a.active .link-text{
opacity: 1;
/* 过渡效果延迟时间 */
transition-delay: 0.1s;
}
/* 选中态背景 */
.link-bg{
width: 160px;
height: 70px;
background-color: #45acc6;
border-radius: 18px;
position: absolute;
left: 30px;
top: 50%;
transform: translateY(-50%);
z-index: 0;
/* 过渡:时长 贝塞尔曲线 */
transition: 0.4s cubic-bezier(0.77, 0, 0.175, 1);
}

42
code/182/182.html Normal file
View File

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>霁青+翠蓝的Tabbar动画特效</title>
<!-- 引入字体图标库 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="182.css">
</head>
<body>
<nav>
<div class="link-bg"></div>
<ul>
<li>
<a class="active">
<i class="fa fa-home"></i>
<span class="link-text">Home</span>
</a>
</li>
<li>
<a>
<i class="fa fa-inbox"></i>
<span class="link-text">Inbox</span>
</a>
</li>
<li>
<a>
<i class="fa fa-user"></i>
<span class="link-text">User</span>
</a>
</li>
</ul>
</nav>
</body>
</html>
<script src="182.js"></script>

22
code/182/182.js Normal file
View File

@ -0,0 +1,22 @@
const links=document.querySelectorAll('a'),
bg=document.querySelector('.link-bg');
// 设置选中态
function setActive(el){
links.forEach(link=>{
link.classList.remove('active');
});
el.classList.add('active');
}
// 遍历所有a标签绑定点击事件
links.forEach((link,index)=>{
link.addEventListener('click',e=>{
// 阻止事件的默认动作
e.preventDefault();
// 计算并设置选中态背景的偏移量
bg.style.transform='translate('+(190*index)+'px,-50%)';
// 设置选中态
setActive(e.currentTarget);
})
})