拖放手风琴组

时间:2016-10-03 05:52:40

标签: jquery knockout.js drag-and-drop accordion bootstrap-accordion

我是前端开发的业余爱好者,因此需要一些指导。

我有一个项目,其中我使用浮动图标栏,其位置存储在数据库中,刷新或重新登录页面时,我使用保存的位置来显示该栏。

代码:

ko.components.register("shortcut-strip", {
    viewModel: function (params) {
        var self = this;
        self.ribbonIcons = params.data;
        self.eleId = params.eleId;
        self.showShortcutStrip = params.showShortcutStrip;

        self.setWidth = ko.computed(function () {
            if(self.ribbonIcons().length){
                //var toggleBtnWidth = $("#sToggle").parents('li').outerWidth();
                var btnWidth = $(".shortcutIcons li").eq(0).outerWidth() || 26;
                return (btnWidth * self.ribbonIcons().length) + 'px';
            }
        });
        self.position = params.position;

        setTimeout(function () {
            var dm = document.getElementById(self.eleId);
            dm.addEventListener('dragstart', drag_start, false);
            document.body.addEventListener('dragover', drag_over, false);
            document.body.addEventListener('drop', drop, false);
        }, 100);

        function drag_start(event) {
            var style = window.getComputedStyle(event.target, null);
            event.dataTransfer.setData("text (parseInt(style.getPropertyValue("left"), 10) - event.clientX) + ',' + (parseInt(style.getPropertyValue("top"), 10) - event.clientY))";
        }

        function drag_over(event) {
            event.preventDefault();
            return false;
        }

        function drop(event) {
            var offset = event.dataTransfer.getData("text").split(',');
            var dm = document.getElementById('dragme');
            dm.style.left = (event.clientX + parseInt(offset[0], 10)) + 'px';
            dm.style.top = (event.clientY + parseInt(offset[1], 10)) + 'px';
            savePositionMethod(dm.style.left, dm.style.top);
            event.preventDefault();
            return false;
        }
    },
    template: '<div data-bind="attr:{id : eleId}, visible: showShortcutStrip, style: {left: position()[0], top: position()[1]}" draggable="true"><div class="shortcut-strip"><ul class="pull-left"><li> <span><img id="sToggle" style="padding: 5px 0px 4px 7px;" src="image.png"/> </span></li></ul> <ul class="shortcutIcons" data-bind="style:{width: setWidth()}"> <!-- ko foreach: ribbonIcons --> <li><img data-bind="attr :{src: Iconsrc, class: Class, title: title}, click: $root.performImageAction" /> </li> <!-- /ko --> </ul></div> </div>'
}); 

但它的作用是它使页面中的所有锚标签和链接都可拖动,因此会在所有元素上触发drop事件。 我怎么解决这个问题 ?请帮忙。

其次我需要在我的手风琴组中实现拖放操作,其代码如下:

<div class="accordion-group" id="assignedAccordion">
    <!--  ko foreach : Data() -->
    <div class="accordion-default" id="documentScroll">
        <div class="panel-title bg-none" data-bind="css:{active : isCollapsed()}">
            <span class="toggle" data-bind="click: $root.toggleCollapse, css:{expand : isCollapsed(), collapsed: !isCollapsed()}")> </span>
            <a class="accordion-toggle" data-bind="event: {contextmenu: $root.documentMenu, click: $root.getData}"></a>
            <input type="checkbox" class="assignedDocCheckbox" data-bind="checked: isChecked">
        </div>
        <div class="accordion-body" data-bind="style:{display : isCollapsed() ? 'block' : 'none'}">
            <!-- ko if: $data.documentData().length > 0 -->
                <ul data-bind="foreach: documentData()[0].pages">
                    <li><a href="javascript:void(0)" class="tool-tip" data-bind="event:{contextmenu: $root.pageMenu, click: $root.selectPage}, css:{'activePage' : $root.activePage() === $data}">
                            ${pageDispName} <span data-bind="text: displayName"></span>
                    </a></li>
                </ul>
            <!-- /ko-->
        </div>
    </div>
    <!-- /ko -->
</div>

0 个答案:

没有答案