angularjs結合html5的拖拽行為


閑聊:

小穎公司的項目之前要實現一個將左側樹中當前拖拽的內容,動態添加到右側樹種,雖然這個模塊當時沒有分給小穎,是同事完成的(小穎也不會嘻嘻),后來看了下他寫代碼,小穎自己寫了個小demo。就當做個筆記啦嘻嘻。

先來 看看具體效果:

實現方法:

1.下載並引入 angularjs

2.HTML代碼:

<!DOCTYPE html>
<html lang="en" ng-app="test">
<head>
    <meta charset="UTF-8">
    <title>Html5 拖拽行為和AngularJs的結合</title>
    <meta charset="utf-8"/>
    <script type="text/javascript" src="js/angular.js"></script>
    <style>
        .to-drag, .drag-stop {
            display: inline-block;
        }
    </style>
</head>
<body ng-controller="main">
<div class="to-drag">
    <ul>
        <li ng-repeat="item in list.data" ng-include="'./lefttree.html'"></li>
    </ul>
</div>
<div class="drag-stop">
    <ul>
        <li ng-repeat="item in rightList.data" ng-include="'./righttree.html'"></li>
    </ul>
</div>
</body>
</html>

3.js

<script type="text/javascript">
    let mod = angular.module("test", []);
    mod.controller("main", ['$scope', function ($scope) {
        $scope.list = {
            data: [{
                id: 1,
                name: '22',
                child: [{
                    id: '1-1',
                    name: '1-1_name-左'
                }, {
                    id: '1-2',
                    name: '1-2_name-左'
                }]
            }],
            dragstart: function (item) {
                $scope.clientInfo = item;
            }
        }
        $scope.rightList = {
            data: [{
                id: 1,
                name: '停止拖動',
                child: [{
                    id: '1-1',
                    name: '1-1_name-右'
                }, {
                    id: '1-2',
                    name: '1-2_name-右'
                }]
            }],
            drop: function (event, item) {
                event.preventDefault();
                console.log("被拖動的元素:->", $scope.clientInfo);
                console.log("當前節點:->", item);
                //調用后端添加接口,實現真實的添加。
            },
            dragover: function (event) {
                event.preventDefault();
            }
        }
    }]);
    var convertFirstUpperCase = function (str) {
        return str.replace(/(\w)/, function (s) {
            return s.toUpperCase();
        });
    };
    rubyDragEventDirectives = {};
    angular.forEach("dragstart drag dragenter dragover drop dragleave dragend".split(' '), function (eventName) {
        var rubyEventName = 'ruby' + convertFirstUpperCase(eventName);
        rubyDragEventDirectives[rubyEventName] = ['$parse', function ($parse) {
            //$parse 語句解析器
            return {
                restrict: 'A',
                compile: function (ele, attr) {
                    var fn = $parse(attr[rubyEventName]);
                    return function rubyEventHandler(scope, ele) {
                        ele[0].addEventListener(eventName, function (event) {
                            if (eventName == 'dragover' || eventName == 'drop') {
                                event.preventDefault();
                            }
                            var callback = function () {
                                fn(scope, {event: event});
                            };
                            callback();
                        });
                    }
                }
            }
        }]
    });
    mod.directive(rubyDragEventDirectives);
</script>

希望可以對大家有所幫助哦。好久都沒寫博客啦,嘻嘻最近變懶了,而且特別懶,哈哈哈哈,天熱啦,大家多喝水哦,注意防暑。

相關文章:Html5 拖拽行為和AngularJs的結合


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM