v指令
v-html:设置innerhtml
内容中有html结构会被解析成标签
v-text:无论内容是什么,都会被解析成文本。
所以,解析文本用v-text,解析html结构用v-html;
如果解析纯文本,v-text与v-html没有任何区别;
如果解析html结构则有所不一样
v-show实例
根据真假切换元素的显示状态
原理是通过display,实现显示隐藏
指令后面的内容最终都会解析为布尔值;
值为True元素显示,值为false元素隐藏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id ="app">
<img v-show = "isShow" src="./1678990507455.jpg" alt="">
<input type="button" value="改变显示状态" @click = "changeIsShow">
</div>
</body>
<script>
var app = new Vue({
el:'#app',
data:{
isShow:false
},
methods:{
changeIsShow:function(){
this.isShow = !this.isShow
}
}
});
</script>
</html>
v-on实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id ="app">
<button @click = "sub"> - </button>
<span>{{ num }}</span>
<button @click = "add"> + </button>
</div>
</body>
<script>
var app = new Vue({
el:'#app',
data:{
num:1
},
methods:{
add:function(){
if(this.num<10){
this.num++;
}else{
alert('别点了,最大啦!');
}
},
sub:function(){
if(this.num>0){
this.num--;
}else{
alert('别点了,最小啦!');
}
},
}
});
</script>
</html>
v-if
根据表达值的真假,切换元素的显示状态,直接操控dom
频繁切换元素的显示状态用v-show,否则用v-if;
v-bind
为元素绑定属性,
完整写法v-bind:属性名 简写的话可以省略v-bind,只保留:属性名
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.active{
border: 1px solid red;
}
</style>
</head>
<body>
<div id ="app">
<img :src="imgSrc" alt="">
<br>
<img :src="imgSrc" alt="" :title = "imgTitle+'!!!'">
<br>
<img :src="imgSrc" alt="" :title = "imgTitle+'!!!'"
:class="{active:isActive}" @click="toggleActive">
</div>
</body>
<script>
var app = new Vue({
el:'#app',
data:{
imgSrc:"https://www.itheima.com/images/logo.png",
imgTitle:"黑马程序员",
isActive:false
},
methods:{
toggleActive:function(){
this.isActive = !this.isActive
}
}
});
</script>
</html>
图片轮换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/index.css">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="mask">
<div class="center">
<h2 class="title"> <img src="./images/logo.png" alt=""> 深圳创维校区环境 </h2>
<img :src="imgList[index]" alt="">
<a
href="javascript:void(0)"
@click="prev"
class="left"
v-show="index>0"
>
<img src="./images/prev.png" alt="">
</a>
<a
href="javascript:void(0)"
@click="next"
class="right"
v-show="index<imgList.length-1"
>
<img src="./images/next.png" alt="">
</a>
</div>
</div>
</body>
<script>
const app = new Vue({
el: "#mask",
data: {
imgList:[
"./images/00.jpg",
"./images/01.jpg",
"./images/02.jpg",
"./images/03.jpg",
"./images/04.jpg",
"./images/05.jpg",
"./images/06.jpg",
"./images/07.jpg",
"./images/08.jpg",
"./images/09.jpg",
"./images/10.jpg",
],
index: 0
},
methods:{
prev(){
this.index--;
},
next(){
this.index++;
}
}
});
</script>
</html>
Css代码:
* {
margin: 0;
padding: 0;
}
html,
body,
#mask {
width: 100%;
height: 100%;
}
#mask {
background-color: #c9c9c9;
position: relative;
}
#mask .center {
position: absolute;
background-color: #fff;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
padding: 10px;
}
#mask .center .title {
position: absolute;
display: flex;
align-items: center;
height: 56px;
top: -61px;
left: 0;
padding: 5px;
padding-left: 10px;
padding-bottom: 0;
color: rgba(175, 47, 47, 0.8);
font-size: 26px;
font-weight: normal;
background-color: white;
padding-right: 50px;
z-index: 2;
}
#mask .center .title img {
height: 40px;
margin-right: 10px;
}
#mask .center .title::before {
content: "";
position: absolute;
width: 0;
height: 0;
border: 65px solid;
border-color: transparent transparent white;
top: -65px;
right: -65px;
z-index: 1;
}
#mask .center > img {
display: block;
width: 700px;
height: 458px;
}
#mask .center a {
text-decoration: none;
width: 45px;
height: 100px;
position: absolute;
top: 179px;
vertical-align: middle;
opacity: 0.5;
}
#mask .center a :hover {
opacity: 0.8;
}
#mask .center .left {
left: 15px;
text-align: left;
padding-right: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
#mask .center .right {
right: 15px;
text-align: right;
padding-left: 10px;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
}