ionic,angularjs,requirejs 結合開發 web
阿新 • • 發佈:2019-02-05
基本套路:
1、先安裝node,配置好npm config set cache 和 npm config set prefix
2、安裝android sdk 和 java 配置環境變數
3、執行npm 命令安裝 npm install -g cordova 和 npm install -g ionic
4、執行 ionic start app(名字隨意) 生成如下
執行 ionic build android 時 app目錄下config.xml 檔案裡 android-minSdkVersion 的value 最小要對應 要和 安裝的androidsdk 的 api 最小版本
5、ionic platform add android
6、套路最後一步 ionic run android
對於做web開發,重點的套路還是在www 檔案裡
接下來 套路里用到了幾種撩的技術,我不是一個好的僚機,實現如下的tab切換,粗略撩吧,撩不好就擼。。。
當然小白撩的也有不對的地方,還是很明顯的,希望互相幫助啦
僚機目錄結構 主要用到了 angular,ionic是把angular封裝了的,還有requirejs(模組載入框架)
main.js 需要的js檔案
config.js ionic配置檔案 android 和ios ui介面的配置和動態效果require.config({ // baseUrl:'../', paths:{ cordova:'cordova', fastclick:'../lib/fastclick', async:'../lib/async', //幫助非同步引入類似下面百度地圖的js domReady:'../lib/domReady', BMap:'http://api.map.baidu.com/api?v=2.0&ak=A796271dae48229367c041db82735a4c&services=false', angular:'../lib/ionic/js/angular/angular', angularAnimate:'../lib/ionic/js/angular/angular-animate', angularSanitize:'../lib/ionic/js/angular/angular-sanitize', uiRouter:'../lib/ionic/js/angular-ui/angular-ui-router', ngResource:'../lib/ionic/js/angular/angular-resource', ionic:'../lib/ionic/js/ionic', ionicAngular:'../lib/ionic/js/ionic-angular', app:'app', config:'config', services:'services/services', mainServices:'services/mainServices', indexServices:'services/indexServices', mapServices:'services/mapServices', mainCtrl:'controllers/mainCtrl', indexCtrl:'controllers/indexCtrl', sortCtrl:'controllers/sortCtrl', memberCtrl:'controllers/memberCtrl', cartCtrl:'controllers/cartCtrl', mapCtrl:'controllers/mapCtrl', controllers:'controllers/controllers', directives:'directives/directives', mainDirective:'directives/mainDirective' }, waitSeconds: 40, shim:{ angular : {exports : 'angular'}, angularAnimate : {deps: ['angular']}, angularSanitize : {deps: ['angular']}, uiRouter : {deps: ['angular']}, ngResource: {deps: ['angular']}, ionic : {deps: ['angular'], exports : 'ionic'}, ionicAngular: {deps: ['angular', 'ionic', 'uiRouter', 'angularAnimate', 'angularSanitize','ngResource']} }, priority:['angular','ionic'], deps:['bootstrap'] });
define(['app', 'ionic'], function (app) { 'use strict'; return angular.module('app.config', ['ionic']).config(function($ionicConfigProvider) { $ionicConfigProvider.platform.android.tabs.style('standard'); $ionicConfigProvider.platform.android.tabs.position('standard'); $ionicConfigProvider.platform.ios.navBar.alignTitle('center'); $ionicConfigProvider.platform.android.navBar.alignTitle('center'); $ionicConfigProvider.platform.android.views.transition('android'); $ionicConfigProvider.platform.ios.views.transition('ios'); }); });
bootstrap.js angular 初始化
define(['ionic', 'angular', 'app', 'routes', 'fastclick'], function (ionic, angular, app) {
'use strict';
var $html,
onDeviceReady = function () {
angular.bootstrap(document, app.name);
};
document.addEventListener("deviceready", onDeviceReady, false);
if (typeof cordova === 'undefined') {
$html = angular.element(document.getElementsByTagName('html')[0]);
angular.element().ready(function () {
try {
angular.bootstrap(document, [app.name]);
} catch (e) {
console.error(e.stack || e.message || e);
}
});
}
window.addEventListener('load', function() { //fastclick 初始化
new FastClick(document.body);
}, false);
});
app.js angular 建立app module
define(['angular',
'uiRouter',
'services',
'controllers',
'directives',
'ionicAngular'],
function (angular, uiRouter) {
'use strict';
var app = angular.module('app', [
'ionic',
'ngResource',
'app.controllers',
'app.directives',
'app.services',
'ui.router']);
return app;
});
routes.js 路由配置 主要是底部tab 切換
define(['app'], function(app) {
'use strict';
app.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('tab', {
url: '/tab',
abstract: true,
templateUrl: 'templates/tabs.html'
})
.state('tab.index', {
url: '/index',
views: {
'tab-index': {
templateUrl: 'templates/site/index.html',
controller: 'indexCtrl'
}
}
})
.state('tab.sort', {
url: '/sort',
views: {
'tab-sort': {
templateUrl: 'templates/sort/index.html',
controller: 'sortCtrl'
}
}
})
.state('tab.cart', {
url: '/cart',
views: {
'tab-cart': {
templateUrl: 'templates/cart/index.html',
controller: 'cartCtrl'
}
}
})
.state('tab.member', {
url: '/member',
views: {
'tab-member': {
templateUrl: 'templates/member/index.html',
controller: 'memberCtrl'
}
}
})
// 地圖
.state('map', {
url: '/map',
templateUrl: 'templates/etc/map.html',
controller: 'mapCtrl'
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/tab/index');
}]);
});
angular 每一個模組需要一個總模組
controllers.js
define(['app','mainCtrl', 'indexCtrl', 'sortCtrl', 'memberCtrl', 'cartCtrl', 'mapCtrl', 'services'], function(app){
'use strict';
var controllers = angular.module('app.controllers', ['app.services', 'app.config']);
controllers.controller('mainCtrl',require('mainCtrl'));
controllers.controller('indexCtrl', require('indexCtrl'));
controllers.controller('sortCtrl', require('sortCtrl'));
controllers.controller('memberCtrl',require('memberCtrl'));
controllers.controller('cartCtrl',require('cartCtrl'));
controllers.controller('mapCtrl',require('mapCtrl'));
controllers.run(['$rootScope', function($rootScope) {
$rootScope.sampleParam = "value";
}]);
return controllers;
});
indexCtrl.js 首頁 依賴 indexService
define(function () {
'use strict';
function ctrl($scope, $mainServices, $indexServices, $ionicTabsDelegate, $ionicSlideBoxDelegate) {
// 載入等待中
$mainServices.showLoading();
$mainServices.hideLoding();
//首頁資料
$indexServices.get(function(data){
$scope.bannerList = data.banner.item;
$scope.couponList = data.coupon.item;
$scope.dazheList = data.tejia.item;
$scope.addr = data.addr;
});
}
ctrl.$inject = ['$scope', '$mainServices', '$indexServices', '$ionicTabsDelegate', '$ionicSlideBoxDelegate'];
return ctrl;
});
mapCtrl.js
define(function () {
'use strict';
function ctrl($scope, $mapServices) {
$mapServices.goFunc();
}
ctrl.$inject = ['$scope', '$mapServices'];
return ctrl;
});
mainCtrl.js 個模組都需要用的ctrl,包括 底部more 顯示隱藏
define(function () {
'use strict';
function ctrl($scope, $ionicTabsDelegate) {
$scope.tabmore = {
show: false
};
$scope.header = {
show: true
};
// more 隱藏顯示
$scope.showToggle = function(target){
$scope[target].show = !$scope[target].show;
};
}
ctrl.$inject = ['$scope', '$ionicTabsDelegate'];
return ctrl;
});
services.js
define(['app','config', 'mainServices', 'indexServices', 'mapServices'], function (app) {
'use strict';
var config = require('config'),
services = angular.module('app.services', ['app.config', 'ngResource']);
services.factory('$mainServices', require('mainServices'));
services.factory('$mapServices', require('mapServices'));
services.service('$indexServices', require('indexServices'));
return services;
});
indexServices.js 首頁資料請求
define(function(){
'use strict'
var service = function($http){
return {
get:function(callback){
$http.get('json/index.json').success(function(data){
return callback(data);
});
}
}
};
service.$inject = ['$http'];
return service;
});
請求的 json 資料如下 隨意寫的 當然暫時 有的沒用到
{
"banner": {
"item":[
{
"img":"a.jpg",
"url":"www.baidu.com"
},
{
"img":"b.jpg",
"url":"http://www.sina.com.cn/"
},
{
"img":"c.jpg",
"url":"http://www.qq.com/"
}
]
},
"addr":{
"nowaddr":{
"longitude":104.061854,
"latitude":34.645081,
"name":"成都"
},
"item":[
{
"longitude":104.061854,
"latitude":34.645081,
"name":"成都"
},
{
"longitude":114.392543,
"latitude":33.848829,
"name":"哈哈"
},
{
"longitude":204.061854,
"latitude":40.645081,
"name":"中國"
},
{
"longitude":110.187771,
"latitude":40.575614,
"name":"哈哈"
},
{
"longitude":114.264138,
"latitude":34.891853,
"name":"嘿嘿"
},
{
"longitude":113.971186,
"latitude":90.82062,
"name":"太平洋"
}
]
},
"coupon": {
"item": [
{
"time": "2016.01.01-2017.05.14",
"money": 787,
"use": 7878,
"isGet": 0,
"url": "http://www.qq.com/"
},
{
"time": "2016.01.01-2017.05.14 ",
"money": 787,
"use": 7878,
"isGet": 1,
"url": "http://www.qq.com/"
}
]
},
"dazhe": {
"item": [
{
"url": "http://www.qq.com/",
"jiage": 1000,
"use": 1200
},
{
"url": "http://www.qq.com/",
"jiage": 1800,
"use": 12200
}
]
},
"tejia": {
"item": [
{
"url": "http://www.qq.com/",
"img": "t.png",
"name": "玉皇大帝",
"nowMoney": 40,
"oldMoeny": 45
},
{
"url": "http://www.qq.com/",
"img": "y.png",
"name": "玉皇大帝",
"nowMoney": 40,
"oldMoeny": 45
},
{
"url": "http://www.qq.com/",
"img": "y.png",
"name": "玉皇大帝",
"nowMoney": 40,
"oldMoeny": 45
},
{
"url": "http://www.qq.com/",
"img": "t.png",
"name": "玉皇大帝",
"nowMoney": 40,
"oldMoeny": 45
}
]
},
"tuijian": {
"item": [
{
"url": "http://www.qq.com/",
"img": "e.png",
"name": "你好"
},
{
"url": "http://www.qq.com/",
"img": "c.png",
"name": "你好"
},
{
"url": "http://www.qq.com/",
"img": "b.png",
"name": "你好"
},
{
"url": "http://www.qq.com/",
"img": "b.png",
"name": "nimei"
},
{
"url": "http://www.qq.com/",
"img": "a.jpg",
"name": "kao"
}
]
}
}
mapServices.js 引入百度map async!BMap
define(['domReady','async!BMap'], function(domReady){
'use strict'
var factory = function(){
var map = new BMap.Map("bmap");
map.centerAndZoom(new BMap.Point(116.404, 39.915), 12);
map.enableScrollWheelZoom();
var start = "魏公村" ,end = "百度大廈";
var transit = new BMap.TransitRoute(map, {
renderOptions: {map: map}
});
transit.search(start,end);
var myIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/location.gif", new BMap.Size(14,23));
return {
goFunc:function(){
//設定起終點圖示
transit.setMarkersSetCallback(function(result){
result[0].marker.setIcon(myIcon);
result[1].marker.setIcon(myIcon);
})
}
}
}
factory.$inject = [];
return factory;
});
directives
define(['app','services','mainDirective'], function(app){
'use strict';
var directives = angular.module('app.directives', ['app.services']);
//tabs tabMore 當然這樣做 是不對的 在tabs.html 寫data-src {'test1':'www.baidu.com','test2':'www.imooc.com'}"
directives.directive('tabMore',[function(){
return {
restrict:'A',
replace:false,
link:function(scope, element, attrs){
let src = JSON.parse(attrs.src.replace(/'/g,"\""));
let htmlStr='';
for(let i in src){
htmlStr += '<a href="'+ src[i] +'">'+ i +'</a>';
}
angular.element(document.querySelector('#tabsmore')).append(htmlStr);
}
};
}]);
//地圖
directives.directive('goaddr',[function(){
return {
restrict: 'A',
replace: false,
link:function(scope, element, attrs){
}
}
}]);
return directives;
});
html
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>TEST</title>
<link type="text/css" href="lib/ionic/css/ionic.css" rel="stylesheet">
<link rel="stylesheet" href="css/index.css">
</head>
<body ng-controller="mainCtrl as mc">
<ion-header-bar class="bar bar-header" ng-show="header.show">
<a href="javascript:;" class="icon-right ion-arrow-down-b button button-clear" ng-click="showToggle('header')">成都</a>
<label class="item item-input stable-dark icon ion-search">
<input type="search" class="dark" placeholder="search"/>
</label>
</ion-header-bar>
<ion-nav-view></ion-nav-view>
<script src='cordova.js'></script>
<script data-main="js/main" src="lib/require.js"></script>
</body>
</html>
tabs.html
<ion-tabs class="tabs-icon-top tabs-color-active-positive">
<ion-tab title="首頁" icon-off="ion-ios-home-outline" icon-on="ion-ios-home" href="#/tab/index">
<ion-nav-view name="tab-index"></ion-nav-view> <!-- name 對應路由 tab-index -->
</ion-tab>
<ion-tab title="分類" icon-off="ion-ios-keypad-outline" icon-on="ion-ios-keypad" href="#/tab/sort">
<ion-nav-view name="tab-sort"></ion-nav-view>
</ion-tab>
<ion-tab title="購物車" icon-off="ion-ios-cart-outline" icon-on="ion-ios-cart" href="#/tab/cart">
<ion-nav-view name="tab-cart"></ion-nav-view>
</ion-tab>
<ion-tab title="會員" icon-off="ion-ios-person-outline" icon-on="ion-ios-person" href="#/tab/member">
<ion-nav-view name="tab-member"></ion-nav-view>
</ion-tab>
<ion-tab title="更多" icon-on="ion-ios-more-outline" tab-More="tab-More" icon-off="ion-ios-more" data-src="{'test1':'www.baidu.com','test2':'www.imooc.com'}" ng-click="showToggle('tabmore')" >
<!-- <ion-nav-view></ion-nav-view> -->
</ion-tab>
<div class="tabsmore" id="tabsmore" ng-show="tabmore.show"></div>
</ion-tabs>
site/index.html 首頁
<ion-view>
<!-- overflow-scroll='false' 安卓端滾動 效果css3-->
<ion-content class="has-header" overflow-scroll='false'>
<ion-slide-box auto-play="true" does-continue="true" slide-interval="2000">
<ion-slide ng-repeat="b_item in bannerList" >
<a href="{{b_item.url}}" >
<img ng-src="{{b_item.img}}" class="full-image">
</a>
</ion-slide>
</ion-slide-box>
<div class="pane-list row addr-now">
<span ng-bind="addr.nowaddr.name" ></span>
<!-- goaddr 地圖指令 -->
<a class="addr-get" goaddr="goaddr" href="#/map" data-latitude="{{addr.nowaddr.latitude}}" data-longitude="{{addr.nowaddr.longitude}}">
導航<em class="addr-icon"></em>
</a>
</div>
<div class="pane-list">
<ul class="row justify coupon-list">
<li class="item coupon-item" ng-repeat="coupon_item in couponList">
<div class="coupon-con ">
<div class="row justify">
<div class="coupon-avatar">
<img src="images/store_coupon.png">
</div>
<div class="coupon-msg">
<p class="coupon_jg">¥{{coupon_item.money}}</p>
<p class="coupon_tj">滿{{coupon_item.use}}使用</p>
</div>
</div>
<p class="coupon-line"></p>
<time class="coupon-time" ng-bind="coupon_item.time"></time>
</div>
</li>
</ul>
<a href="#" class="row coupon-more center">更多好券,去優惠券中心看看<em></em></a>
</div>
<div class="pane-list pane-list-te">
<div class="pane-list-top row">
<em>特</em>
<h3>本週特價</h3>
<a href="" class="pane-list-top-btn">檢視更多</a>
</div>
<ul class="row">
<li class="col col-50" ng-repeat="t_item in dazheList">
<a href="{{t_item.url}}">
<img ng-src="{{t_item.img}}">
</a>
<p class="pane-list-te-name" ng-bind="t_item.name"></p>
<div>
<span class="pane-list-te-nm" ng-bind="'¥'+t_item.nowMoney"></span>
<span class="pane-list-te-om" ng-bind="'¥'+t_item.oldMoeny"></span>
</div>
</li>
</ul>
</div>
<div class="addr-list" ng-show="!header.show">
<div class="addr-title">
<a href="javascript:;" class="cancel" ng-click="showToggle('header')"></a>
切換
</div>
<ion-list>
<ion-item ng-repeat="addr_item in addr.item" ng-bind="addr_item.name" data-latitude="{{addr_item.latitude}}" data-longitude="{{addr_item.longitude}}">
</ion-item>
</ion-list>
</div>
</ion-content>
</ion-view>
css
@media only screen and (max-device-width: 320px) and (orientation: portrait){
.coupon-time {
display: block;
position: relative;
width: 140px;
transform: scale(0.85);
left: -7px;
}
}
.pane {
background-color: #f0f0f0;
}
ins, a {
text-decoration: none;
}
.ionic-logo {
display: block;
margin: 15px auto;
width: 96px;
height: 96px;
}
.u-list{
margin-top: 5px;
margin-bottom: 0;
background-color: #ffffff;
}
.u-title{
padding: 4px 2.66666667%;
}
.row{
padding: 0;
}
.u-list .col-33{
margin: 0 0.5%;
}
.u-list .col-33 img{
max-width: 100%;
}
.u-list .col-33{
text-align: center;
}
.row.item{
border: 0;
}
.pane-list {
background-color: #ffffff;
padding: 10px 0;
margin-bottom: 10px;
}
.prefix{
display: block;
font-size: 12px;
height: 14px;
width: 14px;
color: #fff;
text-align: center;
line-height: 14px;
float: left;
margin: 3px 4px 0 0;
background-color: #4198f7;
}
.justify{
-webkit-box-pack: justify;
box-pack: justify;
justify-content: space-around;
-webkit-justify-content: space-around;
}
.center {
-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-align: center;
-webkit-align-items: center;
-moz-align-items: center;
align-items: center;
}
.bar-header{
background-color: #ff332a;
}
.bar-footer{
background-color: #333333;
}
.bar-header .button-clear.button{
font-size: 13px;
color: #ffffff;
}
.bar.bar-header .button.button-clear:before{
font-size: inherit;
}
.bar-header .item-input{
border: 1px solid #dcdcdc;
border-radius: 5px;
width: 70%;
margin-left: 5%;
}
.bar-header .ion-search:before{
margin-right: 5px;
color: inherit;
color: #b2b2b2;
}
.slider-pager .slider-pager-page {
color: #ff332a;
}
.tabs-icon-top > .tabs .tab-item {
color: #ffffff;
}
.tabs-icon-top.tabs-color-active-positive .tab-item.tab-item-active {
color: #ff332a;
}
.tab-nav.tabs .tab-item.activated {
color: #ffffff;
}
.tab-nav.tabs {
background-color: #333333;
padding: 4px 0;
height: 54px;
}
.tabsmore {
position: absolute;
background-color: #404040;
width: 100px;
right: 0px;
bottom: 53px;
text-align: left;
overflow: hidden;
}
.tabsmore a {
font-size: 13px;
color: #cccccc;
overflow: hidden;
line-height: 34px;
display: block;
padding: 0 6px 0 10px;
border-bottom: 1px solid #333333;
}
.coupon-item.item{
border: 0;
padding: 0;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-ms-border-radius: 8px;
-o-border-radius: 8px;
border-radius: 8px;
overflow: hidden;
width: 47%;
background: url('/images/yhq_b.png') no-repeat right center;
background-size: contain;
padding-right: 34.5px;
}
.coupon-con {
height: 88px;
background-color: #ffffff;
box-sizing: border-box;
padding: 4px 0 0 2%;
border: 1px solid #dadada;
border-right: none;
border-top-left-radius: 8px;
border-bottom-left-radius: 8px;
flex: 10;
background-repeat: no-repeat;
background-position: right top;
background-size: 70px auto;
}
.coupon-avatar img{
margin-right: 2px;
width: 45px;
min-width: 30px;
display: block;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
margin: 0 auto;
}
.item .coupon_jg{
font-size: 19px;
text-align: left;
color: #3991f2;
}
.item .coupon_tj{
background-color: #88bdf7;
height: 14px;
line-height: 14px;
padding: 0 5px;
font-size: 12px;
color: #fff;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
overflow: hidden;
white-space: nowrap;
}
.coupon-line{
height: 4px;
margin-top: 6px;
background: url('/images/yhq_yd.png') repeat-x center center;
background-size: contain;
}
.coupon-time{
color: #707070;
font-size: 12px;
margin-top: 1px;
}
.coupon-more.center{
font-size: 14px;
color: #ff4a4a;
margin-top: 15px;
text-align: center;
}
.coupon-more em {
display: block;
width: 29px;
height: 17px;
background: url('/images/icon_go.png') no-repeat center center;
background-size: contain;
margin-left: 1.5%;
animation: morego 2s ease-in-out infinite;
-webkit-animation: morego 2s ease-in-out infinite;
transform: translateX(0);
-webkit-transform: translateX(0);
opacity: 0.1;
}
@keyframes morego {
form {
transform: translateX(5px);
-moz-transform: translateX(5px);
-o-transform: translateX(5px);
-webkit-transform: translateX(5px);
opacity:0.1;
}
to {
transform: translateX(12px);
-moz-transform: translateX(12px);
-o-transform: translateX(12px);
-webkit-transform: translateX(12px);
opacity:1;
}
}
@-webkit-keyframes morego {
form {
transform: translateX(5px);
-moz-transform: translateX(5px);
-o-transform: translateX(5px);
-webkit-transform: translateX(5px);
opacity:0.1;
}
to {
transform: translateX(12px);
-moz-transform: translateX(12px);
-o-transform: translateX(12px);
-webkit-transform: translateX(12px);
opacity:1;
}
}
.pane-list-top{
overflow: hidden;
padding: 0 2.66666667%;
margin-bottom: 8px;
}
.pane-list-top em {
display: block;
font-size: 12px;
height: 14px;
width: 14px;
text-align: center;
line-height: 14px;
margin: 3px 4px 0 0;
color: #fff;
}
.pane-list-top h3{
padding: 0;
margin: 0;
font-size:17px;
flex: 1;
}
.pane-list-top-btn{
font-size: 12px;
text-align: center;
height: 18px;
line-height: 18px;
padding: 0 6px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
color: #ffffff;
margin-top: 1px;
}
.pane-list-te .pane-list-top em{
background-color: #ff332a;
}
.pane-list-te .pane-list-top-btn{
background-color: #ff332a;
}
.pane-list-te .row{
flex-wrap: wrap;
}
.pane-list-te ul a {
text-align:center;
display: block;
height: 110px;
}
.pane-list-te ul img{
max-height: 100%;
max-width: 100%;
}
.pane-list-te-name{
display: -webkit-box;
display: -moz-box;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
margin: 6px 0 5px;
font-size: 13px;
color: #595959;
}
.pane-list-te-nm {
font-size: 14px;
color: #ff332a;
}
.pane-list-te-om {
color: #b2b2b2;
font-size: 12px;
text-decoration: line-through;
padding-left: 4px;
}
.addr-now {
padding: 10px 1.66666667%;
justify-content: space-between;
-webkit-justify-content: space-between;
}
.addr-now span{
display: block;
max-width: 72.5%;
color: #666666;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.addr-get{
width: 56px;
font-size: 14px;
color: #f352a5;
position: relative;
}
.addr-icon{
display: block;
position: absolute;
transform: rotateX(10deg) rotateZ(20deg);
-moz-transform: rotateX(10deg) rotateZ(20deg);
-o-transform: rotateX(10deg) rotateZ(20deg);
-webkit-transform: rotateX(10deg) rotateZ(20deg);
top: -1px;
right: 4%;
background: url('/images/icon_navigationr.png') no-repeat center center;
background-size: contain;
height: 22px;
width: 22px;
animation: navigationicon 1.5s linear infinite alternate;
-webkit-animation: navigationicon 1.5s linear infinite alternate;
}
@keyframes navigationicon {
form {
transform: rotateX(0deg) rotateZ(0deg);
-moz-transform: rotateX(0deg) rotateZ(0deg);
-o-transform: rotateX(0deg) rotateZ(0deg);
-webkit-transform: rotateX(0deg) rotateZ(0deg);
}
to {
transform: rotateX(50deg) rotateZ(70deg);
-moz-transform: rotateX(50deg) rotateZ(70deg);
-o-transform: rotateX(50deg) rotateZ(70deg);
-webkit-transform: rotateX(50deg) rotateZ(70deg);
}
}
@-webkit-keyframes navigationicon {
form {
transform: rotateX(0deg) rotateZ(0deg);
-moz-transform: rotateX(0deg) rotateZ(0deg);
-o-transform: rotateX(0deg) rotateZ(0deg);
-webkit-transform: rotateX(0deg) rotateZ(0deg);
}
to {
transform: rotateX(50deg) rotateZ(70deg);
-moz-transform: rotateX(50deg) rotateZ(70deg);
-o-transform: rotateX(50deg) rotateZ(70deg);
-webkit-transform: rotateX(50deg) rotateZ(70deg);
}
}
.addr-list {
position: absolute;
top: 0;
background-color: #ffffff;
min-height: 100%;
width: 100%;
z-index: 9;
}
.addr-title{
font-size: 19px;
color: #000000;
text-align: center;
line-height: 44px;
height: 44px;
border-bottom: 1px solid #dcdcdc;
background-color: #f5f5f5;
position: relative;
}
.cancel{
position: absolute;
top: 2px;
height: 40px;
width: 28px;
background: url('/images/icon_search.png') no-repeat center -19px;
background-size: 18px 75.15px;
left: 2.66666667%;
}
有需要的交流的可以加個好友