1. 程式人生 > >[vue]基於vue的響應式HTML img擷取顯示效果

[vue]基於vue的響應式HTML img擷取顯示效果

>問題描述

vue是一個學習曲線相對平緩的響應式框架,利用vue可以做到素材圖片的動態裁剪、切換。

將本文要解決的問題抽象成基本原型進行描述:下圖,為一個尺寸相對固定的素材圖片,實現的目標是每次只實現一格圖片,如下所示:

 -----》 

同時,還要做到頁面的動態響應。

>解決思路

問題的難度就演變成了如何實現圖片的“切片效果”以及動態響應。

切片問題還算簡單,利用div+img,div套用overflow:hidden的style,然後內嵌的img做一個relative的偏移即可;而動態響應,則需要藉助vue中關於內聯樣式的繫結和計算屬性的相關特性。

>程式碼

HTML:

<html>
<head>
<script src="./vue.js"></script>
</head>
<!--div繫結內聯樣式物件-->
<div id='card1' :style="divsize">
        <!--img繫結內聯樣式的計算屬性-->
	<img  :src='picurl' :style="{position:'relative', top:getTop, left:getLeft}"/>
</div>
</div>

</body>
</html>

JavaScript:

<script>
var card1 = new Vue({
	el:'#card1',
	data:{
                // 改變y,x的值,就可以動態切換裁剪後的圖片
		y:1, // 每格圖片的y軸編號,從0起
		x:2, // .........x............
		divsize:{
			width:card_width, // 每格圖片的寬,詳見下文;下同
			height:card_height,
			overflow:'hidden'
		},
                picurl:'./0_1.jpg' // 圖片地址
	},
	computed:{
                // 計算屬性,求偏移量
		getTop: function(){
			return ''+(-pic_top_margin-card_height*this.y)+'px';
		},
		getLeft: function(){
			return ''+(-pic_left_margin-card_width*this.x)+'px';
		}
	}
})
</script>

其中,下面這四個值分別是原素材左上角的起始點座標(leftx,top)、每格圖片的尺寸width,height:

var card_width = 156;
var card_height = 241;
var pic_left_margin = 56;
var pic_top_margin = 48;