ionic 相册功能的实现

本文介绍了如何在ionic应用中实现相册功能,包括轮播显示所有图片、拖动排序、长按删除以及轮播图与缩略图的同步操作。通过引入ngDraggable插件来实现图片的拖动排序功能。

功能需求:

  1. 轮播图显示已添加的所有相片
  2. 实现拖动排序功能
  3. 实现长按弹出删除按钮
  4. 实现轮播图与缩略图同步
    效果图展示:
    效果展示
    使用的插件:ngDraggable
    代码如下:
<ion-view view-title="图片编辑">
    <ion-header-bar align-title="center" class="bar-dark">
        <div class="buttons">
            <button class="button button-icon ion-arrow-left-c button-clear"
                    ng-click="goBack()"></button>
        </div>
        <h1 class="title">图片编辑</h1>
    </ion-header-bar>
    <ion-content  class="has-header goods-album" id = "album">
        <div class="list album-slideBox" >
            <div class="goods-image" style="height:260px">
                <ion-slide-box
                        delegate-handle="goodsImageSlider"
                        style="height:100%;width:100%"
                        on-slide-changed="slideChanged(index)"
                        active-slide="imageSlectIndex"
                        show-pager="true">
                    <ion-slide ng-repeat="item in photoList track by $index">
                        <div style="height:100%;width:100%" class="vertical-container">
                            <div>
                                <img ng-src="{{hostUrl + item  + '?' + random }}" style="max-height:100%;max-width:100%">
                            </div>
                        </div>
                    </ion-slide>
                </ion-slide-box>
            </div>
        </div>
        <div class="album-tips">
            长按图片可拖动排序
        </div>
        <div class="select-container" ng-drop="true" ng-drop-success="dropComplete($index,$data)" >
            <div class="album-image" ng-repeat="item in photoList" ng-style="{height:cw/4 + 'px',width:cw/4 + 'px'}" ng-drag="true" ng-drag-data="item" ng-click="selectPhoto($index)" on-hold="showDelete($index)">
                <img ng-src="img/del.png" class="image-delete" ng-show="getShowScope($index)" ng-click="">
                <div ng-style="{border:fnBorder($index)}">
                    <img ng-src="{{hostUrl + item + '?' + random }}" >
                </div>
            </div >
            <div class="album-plus" ng-style="{height:cw/4 - 10 + 'px',width:cw/4 - 10 + 'px'}" ng-drag="false">
                <div class="plus-div">
                    <img ng-src="img/plus.png">
                </div>
            </div >
        </div>
    </ion-content>
</ion-view>
/*以下是goods-album的css*/
/*相册*/
.goods-album{

}
/*轮播图*/
.goods-album .album-slideBox{

}
/*图片*/
.goods-album .album-slideBox .goods-image{

}
/*小贴士*/
.goods-album .album-tips{
    color: #d7d7d7;
}
/*拖拽容器*/
.select-container{
    position:relative;
    overflow:auto;
}
/*拖拽对象*/
.select-container .album-image{
    padding:5px;
    float:left;
    position:relative;
}
.album-image .image-delete{
    position:absolute;
    height: 20px ;
    width: 20px ;
    margin: 5px;
    right: 5px;
    top: 5px;
}
 .album-image div, .album-image img{
    height: 100%;
    width: 100%;
}
/*plus按钮*/
.select-container .album-plus{
    float:left;
    margin:5px;
    background-color: #d7d7d7;
    position:relative;
    text-align: center;
}
/*加号容器*/
.plus-div{
    overflow: auto;
    margin:auto;
    position:absolute;
    top:0;
    bottom: 0;
    left: 0;
    right: 0;
    height: 30px;
    width:30px
}
.plus-div img{
    height: 100%;
    width: 100%;
}
 //初始化获取photoList
    $scope.photoList = [1,2,3,4,5,6,7,8,9];
    $scope.hostUrl = ConstValue.appHost;
    $scope.random = Variable.getRandom;
    //初始化相片选择按钮
    $scope.cw = document.getElementById("album").clientWidth;
    $scope.imageSelected = 0 ;
    //初始化X按钮,false
    for(var i = 0 ; i < $scope.photoList.length - 1 ; i ++){
        $scope['imageDeleteShow' + i ] = false;
    }
    $scope.fnBorder = function(index){

        if($scope.imageSelected == index){
            return "1px solid red"
        }else{
            return "0"
        }

    };

    $scope.getShowScope = function(i){
      return $scope['imageDeleteShow' + i];
    };
    //选择图片事件
    $scope.selectPhoto = function(index){
        $scope.imageSelected = index;
        $scope.imageSlectIndex = index;
        for(var i = 0 ; i < $scope.photoList.length - 1 ; i ++){
            $scope.fnBorder(i);
        }
    };
    //长按删除事件
    $scope.showDelete = function(index){
        $scope['imageDeleteShow' + index ] = !$scope['imageDeleteShow' + index ];
        // if(!$scope.$$phase){
        //     $scope.$digest;
        // }
    };

    //滚动图片事件
    $scope.slideChanged = function(index){
        $scope.imageSelected = index;
        for(var i = 0 ; i < $scope.photoList.length - 1 ; i ++){
            $scope.fnBorder(i);
        }
    };
    //拖拽图片
    $scope.dropComplete = function(index, obj){

        //重新排序
        var idx = $scope.photoList.indexOf(obj);
        $scope.photoList.splice(idx,1);
        $scope.photoList.splice(index,0,obj);

        //更新slide-box
        $ionicSlideBoxDelegate.update();

    };
IONIC 功能全演示 ===================== - 使用Ionic提供的UI 组件。Ionic本身是致力于建立统一的移动混合app构建平台,核心基础是Angular+Cordova。 - 通过Angular指令封装,以及预定义的CSS,提供了开箱即用的HTML5 Mobile组件。 - 构建与开发支持,能够直接运行www目录下的index.html进行开发调试。同时也支持发布人员利用gulp构建输出到dist目录 - 利用gulp,同样演示了单元测试以及场景测试。 - [在线演示,内有地址二维码,可手机浏览](http://1.thm1118.sinaapp.com/static/ionic/www/index.html) ## 预览 ![信息卡片](screenshot/card.png) ![下拉刷新](screenshot/pullrefress.png) ![表单元素](screenshot/form.png) ![菜单](screenshot/menu.png) ![列表左滑按钮](screenshot/option.png) ![弹出层](screenshot/pop.png) ![tab](screenshot/tab.png) ![幻灯](screenshot/slide.png) ![图片水平滚动](screenshot/hscroll.png) ![毛玻璃效果](screenshot/blure.png) ![2000条数据搜索](screenshot/search.png) ![输入自动完成](screenshot/autocomplete.png) ![列表自动分组](screenshot/autogroup.png) ![媒体相册](screenshot/galaxy.png) ![chartjs统计图](screenshot/chartjs.png) ![百度统计图](screenshot/echat.png) ![图片延时加载](screenshot/imageload.png) ## 基础环境 纯webapp运行或演示,只需要一个 web server部署即可。 ## 目录结构说明 - www 目录:源码目录 - dist目录:构建输出目录 ## 利于开发,测试和打包部署的nodejs环境 简单开发可以不依赖nodejs环境。但是有了基于nodejs的javascript完整开发周期环境,会极大提升开发效率,保障质量。 - nodejs 最新版。 - 有些node包的安装需要c++编译,x86版本只需要 x86的C++编译器,windows上的x64 c++编译器需要特别设置。 - npm 会很慢,要么使用代理,要么使用国内镜像,比如 [淘宝镜像](http://npm.taobao.org/) , 使用淘宝镜像后,npm命令需要替换成cnpm命令。 - `npm install -g gulp` - `npm install -g ionic` - 如需编译sass的话,安装 [ruby](https://www.ruby-lang.org/zh_cn/),再执行 `gem install sass`(如遇到ssl错误,修改为http源:gem source -a http://rubygems.org/) - `npm install -g node-gyp` - 有的node包依赖python编译,安装 [python2.7](https://www.python.org/) - c++编译环境[MSVStudio 免费版](https://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-desktop).。注意根据studio不同版本指定 --msvs_version=2013 选项 - 安装项目开发依赖包,在项目根目录下运行 `npm install` ### “所见即所得”式开发 - 在项目根目录下运行 `ionic serve`,即可在www目录下开展“所见即所得”的方式开发 - 另外一种方式,在webstorm里对index.html 按debug运行,同样是“所见即所得”的方式开发 ### CROS支持 - 生产环境的 CROS支持要么使用jsonp技术,要么在服务端设置代理。 - 而开发环境下要么 基于不安全做法,服务端api 设置头`Access-Control-Allow-Origin:*" `,要么按如下便捷设置: 基于`ionic serve`, 可以在开发时使用本地代理。ionic.project 内设
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值