1. 程式人生 > >利用ionic裡的和 modal 做個仿淘寶商品詳情頁頂部輪播圖的demo

利用ionic裡的和 modal 做個仿淘寶商品詳情頁頂部輪播圖的demo

做這個demo之前首先得了解淘寶app商品詳情頁頂部輪播圖都有哪些構造。

1.幾張圖片輪播展示;

2.點選圖片出現全屏圖片輪播展示;

3.點選第幾張圖,全屏展示對應圖片;

4.全屏展示的圖片可以拖拽放大;

5.全屏圖片可以長按儲存。(這點在這個demo中不會出現,因為博主這個功能是呼叫的Android原生的方法。)

瞭解了功能之後,就可以上手開始做了,好了廢話不多說,直接上程式碼。

html程式碼:

<!DOCTYPE html>
<html ng-app="myapp">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link rel="stylesheet" href="css/ionic.css" />
<script type="text/javascript" src="js/ionic.bundle.js"></script>
<script type="text/javascript" src="js/demo1.js"></script>
<style>
.top_slide_img {
width: 100%;
height: 100%;
background-position: center;
background-repeat: no-repeat;
background-size: 100%;
}
.scale-in {
transform: scale(0.9);
opacity: 0;
}
.scale-in.ng-enter,
.scale-in> .ng-enter {
transition: all cubic-bezier(.1, .7, .1, 1) 400ms;
}
.scale-in.ng-enter-active,
.scale-in> .ng-enter-active {
transform: scale(1);
opacity: 1;
}
.scale-in.ng-leave,
.scale-in> .ng-leave {
transition: all ease-in-out 250ms;
}
.scroll-xy .scroll {
width: 100%;
height: 100%;
}
</style>
</head>
<body ng-controller="main_control">
<ion-nav-view></ion-nav-view>
<script id="demo.html" type="text/ng-template">
<ion-view>
<ion-content>
<ion-slide-box auto-play='true' does-continue="true" slide-interval=2000>
<ion-slide ng-repeat="img in img_data" style="height: 250px; background-color: black;">
<div class="top_slide_img" style="background-image: url({{img.img_url}});" ng-click="open_modal($index)"></div>
</ion-slide>
</ion-slide-box>
</ion-content>
</ion-view>
</script>
<script id="top_slide_modal.html" type="text/ng-template">
<ion-modal-view style="height: {{win_H}}px;bottom: 0;position: fixed;" class="scale-in">
<ion-slide-box delegate-handle="modal_slide" style="height: {{win_H}}px;z-index: 10; background-color: black;">
<ion-slide ng-repeat="img in img_data" ng-click="close_modal()">
<ion-scroll overflow-scroll='false' zooming="true" direction="xy" min-zoom="1" max-zoom="4" style="height: {{win_H}}px;width:{{win_W}}px;">
<div class="top_slide_img" style="background-image: url({{img.img_url}});"></div>
</ion-scroll>
</ion-slide>
</ion-slide-box>
</ion-modal-view>
</script>
</body>
</html>


js程式碼:

angular.module('myapp', ['ionic'])
.run(function ($rootScope) {
        $rootScope.win_W = window.innerWidth;
        $rootScope.win_H=window.innerHeight;
    })
.config(function($stateProvider, $ionicConfigProvider) {
$ionicConfigProvider.scrolling.jsScrolling(true);
$stateProvider
.state("demo", {
templateUrl: "demo.html"
})
})
.controller('main_control', function($scope, $ionicSlideBoxDelegate, $ionicModal,$state) {
$state.go('demo');
$scope.img_data = [{
img_url: 'img/photo1.jpg'
}, {
img_url: 'img/photo2.jpg'
}, {
img_url: 'img/photo3.jpg'
}]
$ionicModal.fromTemplateUrl('top_slide_modal.html',{
scope:$scope,
}).then(function(modal){
$scope.top_slide_modal=modal;
});
$scope.open_modal=function(index){
$scope.top_slide_modal.show();
$ionicSlideBoxDelegate.$getByHandle('modal_slide').slide(index);
}
$scope.close_modal=function(){
$scope.top_slide_modal.hide();
}
$scope.$on('$destroy', function() {
$scope.modal.remove();
});
})


這個demo中用的一些方法,官方文件中都有,說下重點:

demo中用了delegate-handle這是給你的slide-box命名的,它的性質就跟id,class差不多,js中運用$getByHandle(' ')來獲取指定的slide-box,我們在開啟modal時傳一個引數

$index,這個引數指的是點選當前圖片的索引,js中運用slide-box的slide()方法讓slide-box跳到指定圖片。

另一個重點就是圖片的手勢放大,其實ionic的<ion-scroll>是自帶手勢縮放功能,只是現在的版本不支援,但是大牛無處不在嘛,有大牛找到個方法可以取消這個限制,在你的

config裡面加上:$ionicConfigProvider.scrolling.jsScrolling(true);就ok了。

好了,瞭解上面兩個重點就差不多了。