avalon js实现仿google plus图片多张拖动排序附源码下载

下面是“avalon js实现仿google plus图片多张拖动排序附源码下载”的完整攻略:

确定需求

首先要明确需求:实现一个类似于 Google Plus 那样的多张图片拖动排序功能,需要使用 AvalonJS,对应的 HTML 还要使用 Bootstrap。

搭建 HTML

首先,需要布局页面和引入依赖。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>avalonjs实现图片拖动排序功能</title>
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css">
</head>
<body>
    <div class="container" ms-controller="picvm">
        <label for="imgs">添加图片</label>
        <input type="file" id="imgs" accept="image/*" multiple="[1]" ms-duplex="imgs" />
        <br><br>
        <div class="row">
            <div class="col-sm-3" ms-repeat-item="pics">
                <div class="thumbnail">
                    <img ms-attr="{src:item+'?imageView2/1/w/200/h/200/q/85'}" />
                    <input type="text" class="form-control" ms-duplex="pics[$index]" />
                    <button type="button" class="btn btn-danger btn-xs" ms-click="removepic($index)">删除</button>
                </div>
            </div>
        </div>
    </div>

    <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
    <script src="//cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="//cdn.bootcss.com/avalon.js/2.2.6/avalon.min.js"></script>
    <script src="/js/picsort.js"></script>
</body>
</html>

编写 JavaScript

然后开始写 PicSort 模块,并使用 avalon.bootstrap 中的 sortable 组件 实现拖拽排序功能。

<script>
    avalon.define({
        $id: "picvm",
        imgs: [],
        pics: [],
        picSort: function (array) {
            function del (index) {
                array.splice(index, 1);
            }
            return _.sortBy(array, function (pic) {
                return pic.order;
            });
        },
        removepic: function (index) {
            this.pics[index].deleted = true;
        }
    });

    require(['avalon', 'text!app/pic/pic.html'], function (avalon, tpl) {
        avalon.templateCache.pic = tpl;
        avalon.templateCache.picSort = '<ul class="list-group"><li class="list-group-item" ms-repeat="newOrder">{{item}}</li></ul>';
        avalon.component('ms-pic', {
            template: tpl,
            defaults: {
                img: "",
                name: "",
                deleted: false
            }
        });
        avalon.component('ms-pic-sort', {
            template: '<div ms-sortable="newOrder" ms-effect-allowed="move" ms-nest="true" ms-visible="false">' +
                '<content select=".list-group-item" ms-for-el="newOrder"></content>' +
                '</div>',
            defaults: {
                newOrder: []
            },
            onInit: function () {
                var oldOrder = [],
                    that = this;
                avalon.Array.each(this.$children, function (item) {
                    that.newOrder.push(item.name);
                    oldOrder.push(item.name);
                });
                this.$watch('newOrder', function () {
                    _.each(that.newOrder, function (e, i) {
                        if (e !== oldOrder[i]) {
                            var currentItem = _.find(that.$children, function (item) {
                                return item.name === e;
                            });
                            that.$children.splice(i, 0, currentItem);
                            oldOrder.splice(i, 0, currentItem.name);
                            that.$children.splice(that.$children.indexOf(currentItem), 1);
                            oldOrder.splice(oldOrder.indexOf(currentItem.name), 1);
                        }
                    });
                });
            }
        });
        avalon.scan();
    });
</script>

通过调用 avalon.component 方法定义两个组件:ms-pic 和 ms-pic-sort。这些组件用来加入图片,并提供图片的拖放排序。

下载源码

如果你想查看完整的可运行代码,可以参考我的 GitHub

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:avalon js实现仿google plus图片多张拖动排序附源码下载 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 绝对定位元素被遮挡的解决方法

    绝对定位元素被遮挡是一个常见的CSS布局问题。本文将为大家详细讲解该问题的解决方法。 问题原因 绝对定位元素(position: absolute)从文档流中脱离,并且是相对于其最近的定位祖先(类似于position: relative)进行定位的。如果该定位祖先没有正确地定位或设置了z-index属性,则可能会导致绝对定位元素被其他元素遮挡。 解决方法 使…

    css 2023年6月9日
    00
  • js原生代码实现轮播图的实例讲解

    下面是“js原生代码实现轮播图的实例讲解”的攻略。 1. 轮播图的基本原理 轮播图的基本原理是利用定时器,按照一定的时间间隔切换图片。一般而言,轮播图有两种切换方式: 水平方向的切换:即图片从左到右依次展示的切换方式。 垂直方向的切换:即图片从上往下依次展示的切换方式。 2. 实现轮播图的思路 实现轮播图的基本思路如下: 创建一个容器来包裹图片。 在容器中插…

    css 2023年6月10日
    00
  • Web页面中5种超酷的Hover效果分享

    下面就来详细讲解“Web页面中5种超酷的Hover效果分享”的完整攻略。 1. 简介 Hover效果是指当鼠标悬停在一个HTML元素上时,该元素会发生一些动画效果。在Web页面设计中,Hover效果常被用于实现交互性,增强用户体验,提升页面的美感和吸引力。 本篇攻略将向大家分享5种超酷的Hover效果,它们包括: 缩放效果 阴影效果 图片覆盖效果 文字渐变效…

    css 2023年6月10日
    00
  • 如何解决前端笔记本屏幕显示缩放比例125%,150%对页面布局的影响

    解决前端笔记本屏幕显示缩放比例125%、150%对页面布局的影响,可以采用如下方法: 方法一:使用Viewport适配 Viewport是移动端常用的适配方案,可以将网页按照设备的物理像素来渲染。使用Viewport适配,可以避免屏幕缩放对页面布局的影响。 在页面头部引入以下代码: <meta name="viewport" con…

    css 2023年6月10日
    00
  • CSS伪元素 :before, :after, box-shadow应用

    当我们在网页中使用CSS进行样式美化时,可能会遇到一些需要使用到CSS伪元素及box-shadow的情况。下面是对它们的详细解释及用法示例: 1. CSS伪元素 CSS伪元素是CSS中的一种元素,本身在DOM树中并不存在。它可以在一个已有的元素的前面或后面添加内容,或者为其设置属性并使其能够与其他内容分开样式。 :before :before伪元素是在一个元…

    css 2023年6月9日
    00
  • 元素绝对定位以后设置了高宽,a标签不能点击的原因及解决方法

    下面我来详细讲解“元素绝对定位以后设置了高宽,a标签不能点击的原因及解决方法”的完整攻略。 问题描述 在网页开发过程中,有可能会遇到一个问题,就是元素绝对定位以后设置了高宽,但其中的a标签不能被点击,这个问题是怎么产生的呢? 问题分析 首先,我们需要了解为什么元素的绝对定位和高宽设置会导致a标签不能被点击。 在HTML中,元素的定位方式分为相对定位和绝对定位…

    css 2023年6月9日
    00
  • 在React中写一个Animation组件为组件进入和离开加上动画/过度效果

    在React中实现动画效果,通常可以使用React动画库实现,其中比较流行的动画库有React Transition Group和React Spring等。其中React Transition Group提供了两种基本的过渡动画,分别是淡入淡出以及挂载和卸载时的滑动效果。下面我将介绍如何在React中使用React Transition Group实现组件…

    css 2023年6月10日
    00
  • IE9+已经不对document.createElement向下兼容的解决方法

    IE9+不再对document.createElement向下兼容,主要原因是因为IE9以下的版本存在一些安全隐患。因此,我们需要寻找一些解决方法来兼容IE9+。 解决方法 1. 使用createElementNS方法 createElementNS(namespaceURI, qualifiedName)方法是createElement方法的一个变体,它可…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部