拖放排序列表JS插件---SortableJS使用教程

github下载地址:https://github.com/SortableJS/Sortable

个人百度网盘下载地址:

链接:https://pan.baidu.com/s/1Y4Od-Ysgs2xliTUjb16S-A 
提取码:emvt 
 

业务逻辑:

从右边全部课程区域拖拽一个副本到左边区域,右边数据源区域不能产生排序,左边内容接收区分好几个tab,每个tab内的课程ID唯一且换不影响,每个tab内的拖拽组件可排序、删除、分页。

页面引入JS:

<script src="/manager_assets/sortable/Sortable.js"></script>

页面代码:

【全部课程区域】

<div id="items"></div>
		//全部课程
		var sortable = Sortable.create(document.getElementById('items'), {
			group: {
				name: 'advanced',
				pull: 'clone',//pull用来定义从这个列表容器移动出去的设置,可设置值:true/false/'clone'/function
				put: false	//put用来定义往这个列表容器放置列表单元的的设置,true/false/['foo','bar']/function	这里用false表示列表容器不可以从其他列表容器内放入列表单元;
			},
			sort: false,//设置排序不可用
			onEnd: function(evt, obj) {//列表单元拖放结束后的回调函数
				$(evt.item).css("border", ""); //删除表示重复的样式
			},
		});

【左边内容接收区域】

(用的是layUI)

<div class="course-container" style="background: #fff; width: 55%; height: 95%; left: 0px; border: 1px solid #000000;">
				<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
					<ul class="layui-tab-title">
						<li class="layui-this">会员最新上架</li>
						<li>即将上架</li>
						<li>推荐课程</li>
						<li>热门课程</li>
					</ul>
					<div class="layui-tab-content">
						<div class="layui-tab-item layui-show">
							<div id="vpiNewTab" style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
							<div id="vpiNewTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
						</div>
						<div class="layui-tab-item">
							<div id="comingTab" style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
							<div id="comingTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
						</div>
						<div class="layui-tab-item">
							<div id="recommendTab" style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
							<div id="recommendTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>							
						</div>
						<div class="layui-tab-item">
							<div id="hotTab" style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
							<div id="hotTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
						</div>
					</div>
				</div>
			</div>
		//会员最新上架sortable
		var vipSortable = Sortable.create(document.getElementById('vpiNewTab'), {
			group: {
				name: 'advanced',
				pull: true,
				put: function(evt, from, item) {//当有新组件拖过来该容器,调用该函数
					//去重
					return norepeat(evt, item,3);
					
				},

			},
			onAdd: function(evt) { //拖拽完成调用该函数
			    //添加组件到会员最新上架Tab
				addItem(evt.newIndex, evt.item, evt.to, 3);
			},
			onUpdate: function(evt) {//	列表单元在列表容器中的排序发生变化后的回调函数
				//容器内只有一个组件的时候拖拉不会触发该函数

                //拖拽更新排序位置
				sortCourses(evt,3);

			},
		});

参考资料:

https://segmentfault.com/a/1190000008209715?utm_source=tag-newest

https://www.jb51.net/article/96446.htm

 

该页面全部代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>课程排序</title>
</head>
<style>
    body {
        -webkit-text-size-adjust: none
    }

    .course-container {
        position: absolute !important;
        margin: 20px;
        top: 0px;
    }

    .all-course-style {
        /* border-bottom:1px solid #000000; */
        font-weight: bold;
        font-size: 125%;
        padding: 20px 20px 10px 20px;
    }

    .hr-style {
        /*内嵌水平线*/
        width: 100%;
        margin: 1 auto;
        border: 0;
        height: 0;
        border-top: 1px solid rgba(0, 0, 0, 0.1);
        border-bottom: 1px solid rgba(255, 255, 255, 0.3);
    }

    .allc-style {
        margin-left: 5px;
        margin-right: 5px;
    }

    div.imgcard {
        width: 130px;
        height: 145px;
        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
        text-align: center;
        display: inline-block;
        position: relative;
    }

    .Pagging {
        left: calc(50% - 162px)
    }

    .card-word {
        font-size: 80%;
        text-align: left;
        margin: 3px;
        text-overflow: -o-ellipsis-lastline;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        min-height: 35px;
    }

    .course-price-status {
        color: #F5C63B;
    }

    .course-bottom {
        color: #909399;
        font-size: 12px;
        transform: scale(0.833333);
    }

    .card-img {
        width: 130px;
        height: 70px;
    }
</style>

<body>
<div id="advanced">
    <!-- 左边容器 -->
    <div class="course-container"
         style="background: #fff; width: 55%; height: 95%; left: 0px; border: 1px solid #000000;">
        <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
            <ul class="layui-tab-title">
                <li class="layui-this">会员最新上架</li>
                <li>即将上架</li>
                <li>推荐课程</li>
                <li>热门课程</li>
            </ul>
            <div class="layui-tab-content">
                <div class="layui-tab-item layui-show">
                    <div id="vpiNewTab"
                         style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
                    <div id="vpiNewTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
                </div>
                <div class="layui-tab-item">
                    <div id="comingTab"
                         style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
                    <div id="comingTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
                </div>
                <div class="layui-tab-item">
                    <div id="recommendTab"
                         style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
                    <div id="recommendTabPagging" class="Pagging"
                         style="position: absolute; bottom: 0;bottom:0px;"></div>
                </div>
                <div class="layui-tab-item">
                    <div id="hotTab"
                         style="width: 860px; height: 610px; position: absolute; overflow-y: auto; padding: 10px;"></div>
                    <div id="hotTabPagging" class="Pagging" style="position: absolute; bottom: 0;bottom:0px;"></div>
                </div>
            </div>
        </div>
    </div>
    <!-- 右边容器 -->
    <div class="course-container"
         style="background: #fff; width: 41%; height: 95%; right: 0px; border: 1px solid #000000;">
        <div class="all-course-style">
            全部课程
            <hr class="hr-style">
        </div>
        <div class="allc-style">
            <div class="layui-inline" style="width: 100%">
                <label class="layui-form-label">课程名称:</label>
                <div class="layui-input-inline">
                    <input id="coursename" lay-verify="required|phone" autocomplete="off" class="layui-input"
                           style="height: 30px;">
                </div>
                <button class="layui-btn layui-btn-sm" style="margin-left: 30px;" onclick="allCourses(1)">搜索</button>
            </div>

            <div id="items"></div>

            <div id="allCoursePagging" class="Pagging" style="position: absolute; bottom:0px;"></div>
        </div>
    </div>
</div>
</body>
<script src="***/js/jquery.min.js"></script>
<script src="***/sortable/Sortable.js"></script>
<script src="***/layui/layui.js"></script>
<link rel="stylesheet" href="***/layui/css/layui.css">
<script src="***/layui/lay/modules/layer.js"></script>
<link rel="stylesheet" href="***/layui/css/modules/layer/default/layer.css">
<script>
    var vipNewCIds = new Array();
    var comingCIds = new Array();
    var recommendCIds = new Array();
    var hotCIds = new Array();

    var loadComing = 0;
    var loadRecommend = 0;
    var loadHot = 0;


    var origin = window.location.origin;
    var paging = {
        currentPage: 1,
        pageSize: 12,
        total: 0
    }
    var pagingl = {
        currentPage: 1,
        pageSize: 15,
        total: 0
    }
    var pagingComing = {
        currentPage: 1,
        pageSize: 15,
        total: 0
    }
    var pagingRecommend = {
        currentPage: 1,
        pageSize: 15,
        total: 0
    }
    var pagingHot = {
        currentPage: 1,
        pageSize: 15,
        total: 0
    }

    var comingpage = null;
    var recommendpage = null;
    var hotpage = null;

    layui.use('element', function () {
        var element = layui.element;
        //一些事件监听
        element.on('tab(docDemoTabBrief)', function (data) {
            //console.log(this); //当前Tab标题所在的原始DOM元素
            //console.log(data.index); //得到当前Tab的所在下标
            //console.log(data.elem); //得到当前的Tab大容器
            if (data.index == 1) {//即将上架
                if (loadComing == 0) {
                    //已load
                    loadComing = 1;
                    //list数据
                    listTabCourses(4, $("#comingTab"));
                    //初始化即将上架的分页
                    layui.use('laypage', function () {
                        comingpage = layui.laypage;
                        //执行一个laypage实例
                        comingpage.render({
                            elem: 'comingTabPagging', //注意,这里的 test1 是 ID,不用加 # 号
                            count: pagingComing.total, //数据总数,从服务端得到
                            limit: pagingComing.pageSize,
                            groups: 3,
                            jump: function (obj, first) {
                                //obj包含了当前分页的所有参数,比如:
                                //console.log("obj.count",obj.count);
                                //console.log("obj.curr",obj.curr);//得到当前页,以便向服务端请求对应页的数据。
                                //console.log("obj.limit",obj.limit);//得到每页显示的条数

                                if (obj.curr != pagingComing.currentPage) {
                                    pagingComing.currentPage = obj.curr;
                                    //首次不执行
                                    if (!first) {
                                        listTabCourses(4, $("#comingTab"));
                                    }
                                }
                            }
                        });
                    });
                }

            } else if (data.index == 2) {
                if (loadRecommend == 0) {
                    //已load
                    loadRecommend = 1;
                    //list数据
                    listTabCourses(2, $("#recommendTab"));
                    //初始化即将上架的分页
                    layui.use('laypage', function () {
                        recommendpage = layui.laypage;
                        //执行一个laypage实例
                        recommendpage.render({
                            elem: 'recommendTabPagging', //注意,这里的 test1 是 ID,不用加 # 号
                            count: pagingRecommend.total, //数据总数,从服务端得到
                            limit: pagingRecommend.pageSize,
                            groups: 3,
                            jump: function (obj, first) {
                                if (obj.curr != pagingRecommend.currentPage) {
                                    pagingRecommend.currentPage = obj.curr;
                                    //首次不执行
                                    if (!first) {
                                        listTabCourses(2, $("#recommendTab"));
                                    }
                                }
                            }
                        });
                    });
                }
            } else if (data.index == 3) {
                if (loadHot == 0) {
                    //已load
                    loadHot = 1;
                    //list数据
                    listTabCourses(1, $("#hotTab"));
                    //初始化即将上架的分页
                    layui.use('laypage', function () {
                        hotpage = layui.laypage;
                        //执行一个laypage实例
                        hotpage.render({
                            elem: 'hotTabPagging', //注意,这里的 test1 是 ID,不用加 # 号
                            count: pagingHot.total, //数据总数,从服务端得到
                            limit: pagingHot.pageSize,
                            groups: 3,
                            jump: function (obj, first) {
                                if (obj.curr != pagingHot.currentPage) {
                                    pagingHot.currentPage = obj.curr;
                                    //首次不执行
                                    if (!first) {
                                        listTabCourses(1, $("#hotTab"));
                                    }
                                }
                            }
                        });
                    });
                }
            }
        });
    });

    $(function () {
        //初始化页面数据
        allCourses();
        listTabCourses(3, $("#vpiNewTab"));

    })

    function listTabCourses(cSortType, target) {
        var pagedata = "";
        if (cSortType == 1) {
            pagedata = JSON.stringify(pagingHot);
        } else if (cSortType == 2) {
            pagedata = JSON.stringify(pagingRecommend);
        } else if (cSortType == 3) {
            pagedata = JSON.stringify(pagingl);
        } else if (cSortType == 4) {
            pagedata = JSON.stringify(pagingComing);
        }
        $.ajax({
            url: origin + "***",
            type: 'post',
            dataType: 'json',
            async: false,
            data: {
                "paging": pagedata,
                "cSortType": cSortType
            },
            success: function (data) {
                createCard(data.res, $(target), 1, cSortType);

                if (cSortType == 4) {
                    pagingComing.total = data.tempObj.total;
                    if (data.tempObj.ids) {
                        comingCIds = data.tempObj.ids.split(",");
                    }

                } else if (cSortType == 3) {//会员最新上架
                    pagingl.total = data.tempObj.total;
                    if (data.tempObj.ids) {
                        vipNewCIds = data.tempObj.ids.split(",");
                    }

                } else if (cSortType == 2) {//会员最新上架
                    pagingRecommend.total = data.tempObj.total;
                    if (data.tempObj.ids) {
                        recommendCIds = data.tempObj.ids.split(",");
                    }

                } else if (cSortType == 1) {//会员最新上架
                    pagingHot.total = data.tempObj.total;
                    if (data.tempObj.ids) {
                        hotCIds = data.tempObj.ids.split(",");
                    }

                }


            }
        });

    }

    //初始化会员最新上架的分页
    var viplaypage = null;
    layui.use('laypage', function () {
        viplaypage = layui.laypage;
        //执行一个laypage实例
        viplaypage.render({
            elem: 'vpiNewTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
            ,
            count: pagingl.total //数据总数,从服务端得到
            ,
            limit: pagingl.pageSize,
            groups: 3,
            jump: function (obj, first) {
                //首次不执行
                if (!first) {
                    pagingl.currentPage = obj.curr;
                    listTabCourses(3, $("#vpiNewTab"));
                }
            }
        });
    });


    function allCourses(searchClick) {

        if (searchClick == 1) {
            paging.currentPage = 1; //点击搜索之后分页重置为第一页
        }
        $.ajax({
            url: origin + "***",
            type: 'post',
            async: false,
            dataType: 'json',
            data: {
                "paging": JSON.stringify(paging),
                "title": $("#coursename").val()
            },
            success: function (data) {
                //渲染页面
                createCard(data.res, $("#items", 0));

                paging.total = data.tempObj;
                if (searchClick == 1) {
                    //初始化分页
                    layui.use('laypage', function () {
                        var laypage = layui.laypage;
                        //执行一个laypage实例
                        laypage.render({
                            elem: 'allCoursePagging' //注意,这里的 test1 是 ID,不用加 # 号
                            ,
                            count: paging.total //数据总数,从服务端得到
                            ,
                            limit: paging.pageSize,
                            groups: 3,
                            jump: function (obj, first) {
                                //首次不执行
                                if (!first) {
                                    paging.currentPage = obj.curr;
                                    allCourses();
                                }
                            }
                        });
                    });
                }
            },
            error: function (res) {
                console.log("获取初始数据失败!!");
            }

        });
    }

    function addToCourseSort(ids, type, sortType) {
        $.ajax({
            url: origin + "***",
            type: 'post',
            dataType: 'json',
            data: {
                'ids': ids,
                'course_type': type,
                'sortType': sortType
            },
            success: function (data) {
                if (type == 1) {
                    if (data.tempObj) {
                        hotCIds = data.tempObj.split(",");
                    }
                    if (data.status == 0) {
                        pagingHot.total += 1;
                    }
                    //拖到过来后,分页中的total也要+1
                    hotpage.render({
                        elem: 'hotTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                        ,
                        count: pagingHot.total //数据总数,从服务端得到
                        ,
                        limit: pagingHot.pageSize,
                        groups: 3,
                        curr: pagingHot.currentPage,
                        jump: function (obj, first) {
                            if (obj.curr != pagingHot.currentPage) {
                                pagingHot.currentPage = obj.curr;
                                listTabCourses(1, $("#vpiNewTab"));
                            }
                        }
                    });
                } else if (type == 2) {
                    if (data.tempObj) {
                        recommendCIds = data.tempObj.split(",");
                    }
                    if (data.status == 0) {
                        pagingRecommend.total += 1;
                    }
                    //拖到过来后,分页中的total也要+1
                    recommendpage.render({
                        elem: 'recommendTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                        ,
                        count: pagingRecommend.total //数据总数,从服务端得到
                        ,
                        limit: pagingRecommend.pageSize,
                        groups: 3,
                        curr: pagingRecommend.currentPage,
                        jump: function (obj, first) {
                            if (obj.curr != pagingRecommend.currentPage) {
                                pagingRecommend.currentPage = obj.curr;
                                listTabCourses(2, $("#recommendTab"));
                            }
                        }
                    });
                } else if (type == 3) {
                    if (data.tempObj) {
                        vipNewCIds = data.tempObj.split(",");
                    }
                    if (data.status == 0) {
                        pagingl.total += 1;
                    }
                    //拖到过来后,分页中的total也要+1
                    viplaypage.render({
                        elem: 'vpiNewTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                        ,
                        count: pagingl.total //数据总数,从服务端得到
                        ,
                        limit: pagingl.pageSize,
                        groups: 3,
                        curr: pagingl.currentPage,
                        jump: function (obj, first) {
                            if (obj.curr != pagingl.currentPage) {
                                pagingl.currentPage = obj.curr;
                                listTabCourses(3, $("#vpiNewTab"));
                            }
                        }
                    });
                } else if (type == 4) {
                    if (data.tempObj) {
                        comingCIds = data.tempObj.split(",");
                    }
                    if (data.status == 0) {
                        pagingComing.total += 1;
                    }
                    //拖到过来后,分页中的total也要+1
                    viplaypage.render({
                        elem: 'comingTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                        ,
                        count: pagingComing.total //数据总数,从服务端得到
                        ,
                        limit: pagingComing.pageSize,
                        groups: 3,
                        curr: pagingComing.currentPage,
                        jump: function (obj, first) {
                            if (obj.curr != pagingComing.currentPage) {
                                pagingComing.currentPage = obj.curr;
                                listTabCourses(4, $("#comingTab"));
                            }
                        }
                    });
                }

            }
        })

    }

    //初始化分页
    layui.use('laypage', function () {
        var laypage = layui.laypage;
        //执行一个laypage实例
        laypage.render({
            elem: 'allCoursePagging' //注意,这里的 test1 是 ID,不用加 # 号
            ,
            count: paging.total //数据总数,从服务端得到
            ,
            limit: paging.pageSize,
            groups: 3,
            jump: function (obj, first) {
                //首次不执行
                if (!first) {
                    paging.currentPage = obj.curr;
                    allCourses();
                }
            }
        });
    });

    //全部课程
    var sortable = Sortable.create(document.getElementById('items'), {
        group: {
            name: 'advanced',
            pull: 'clone',//pull用来定义从这个列表容器移动出去的设置,可设置值:true/false/'clone'/function
            put: false	//put用来定义往这个列表容器放置列表单元的的设置,true/false/['foo','bar']/function	这里用false表示列表容器不可以从其他列表容器内放入列表单元;
        },
        sort: false,//设置排序不可用
        onEnd: function (evt, obj) {//列表单元拖放结束后的回调函数
            $(evt.item).css("border", ""); //删除表示重复的样式
        },
    });

    var hotSortable = Sortable.create(document.getElementById('hotTab'), {
        group: {
            name: 'advanced',
            pull: true,
            put: function (evt, from, item) {
                //去重
                return norepeat(evt, item, 1);
            },

        },
        onAdd: function (evt) { //拖拽完成
            addItem(evt.newIndex, evt.item, evt.to, 1);
            //然后请求后台ajax 这样就完成了拖拽排序

        },
        onUpdate: function (evt) {
            sortCourses(evt, 1);

        },
    });
    var recommendSortable = Sortable.create(document.getElementById('recommendTab'), {
        group: {
            name: 'advanced',
            pull: true,
            put: function (evt, from, item) {
                //去重
                return norepeat(evt, item, 2);
            },

        },
        onAdd: function (evt) { //拖拽完成
            addItem(evt.newIndex, evt.item, evt.to, 2);
            //然后请求后台ajax 这样就完成了拖拽排序

        },
        onUpdate: function (evt) {
            sortCourses(evt, 2);

        },
    });
    var comingSortable = Sortable.create(document.getElementById('comingTab'), {
        group: {
            name: 'advanced',
            pull: true,
            put: function (evt, from, item) {
                //去重
                return norepeat(evt, item, 4);
            },

        },
        onAdd: function (evt) { //拖拽完成
            addItem(evt.newIndex, evt.item, evt.to, 4);
            //然后请求后台ajax 这样就完成了拖拽排序

        },
        onUpdate: function (evt) {
            sortCourses(evt, 4);

        },
    });

    //会员最新上架sortable
    var vipSortable = Sortable.create(document.getElementById('vpiNewTab'), {
        group: {
            name: 'advanced',
            pull: true,
            put: function (evt, from, item) {//当有新组件拖过来该容器,调用该函数
                //去重
                return norepeat(evt, item, 3);

            },

        },
        onAdd: function (evt) { //拖拽完成调用该函数
            //添加组件到会员最新上架Tab
            addItem(evt.newIndex, evt.item, evt.to, 3);
        },
        onUpdate: function (evt) {//	列表单元在列表容器中的排序发生变化后的回调函数
            //容器内只有一个组件的时候拖拉不会触发该函数

            //拖拽更新排序位置
            sortCourses(evt, 3);

        },
    });

    function sortCourses(evt, cSortType) {
        //新的排序根据前面那个card的id来定位,没有前面的card的时候就根据后面的id来定位
        var sorttype = -1;
        var ids = "";
        if (evt.newIndex > 0) { //不是第一个,就根据前面的ID来定位
            ids = $($(evt.to).children()[evt.newIndex - 1]).attr("id") + "," + $(evt.item).attr("id");
            sorttype = 0;
        } else { //是第一个,就根据后面那个ID定位
            ids = $(evt.item).attr("id") + "," + $($(evt.to).children()[evt.newIndex + 1]).attr("id");
            sorttype = 1;
        }
        $.ajax({
            url: origin + "/***",
            dataType: 'json',
            data: {
                'sortType': sorttype,
                'cSortType': cSortType,
                'ids': ids
            },
            success: function (data) {
                for (var i = 0, len = $(evt.to).children().length; i < len; i++) {
                    $($(evt.to).children()[i].firstChild).text(i + 1);
                }
            }
        });
    }


    function norepeat(evt, item, type) {
        if (type == 3) {
            for (var i = 0, len = vipNewCIds.length; i < len; i++) {
                if ($(item).attr("id") == vipNewCIds[i]) {
                    $(item).css("border", "1px solid red");
                    //layer.msg('该课程已经存在,请勿重复添加');
                    return false;
                }
            }
        } else if (type == 4) {
            for (var i = 0, len = comingCIds.length; i < len; i++) {
                if ($(item).attr("id") == comingCIds[i]) {
                    $(item).css("border", "1px solid red");
                    //layer.msg('该课程已经存在,请勿重复添加');
                    return false;
                }
            }
        } else if (type == 2) {
            for (var i = 0, len = recommendCIds.length; i < len; i++) {
                if ($(item).attr("id") == recommendCIds[i]) {
                    $(item).css("border", "1px solid red");
                    //layer.msg('该课程已经存在,请勿重复添加');
                    return false;
                }
            }
        } else if (type == 1) {
            for (var i = 0, len = hotCIds.length; i < len; i++) {
                if ($(item).attr("id") == hotCIds[i]) {
                    $(item).css("border", "1px solid red");
                    //layer.msg('该课程已经存在,请勿重复添加');
                    return false;
                }
            }
        }
        return true;
    }

    function addItem(index, item, to, type) {
        var head = $('<span class="layui-badge layui-bg-orange sort" style="position:absolute;left:0;">' +
            (index + 1) +
            '</span><i class="layui-icon" onclick="delCard(&apos;' +
            $(item).attr("id") +
            '&apos;,' + type +
            ')" style="position:absolute;right:0;color:#fff;background-color:#D9001B;cursor:pointer;">&#xe640;</i>')
        $(item).prepend(head); //
        //动态排序
        for (var i = 0, len = $(to).children().length; i < len; i++) {
            $($(to).children()[i].firstChild).text(i + 1);
        }
        //拼装ids,传两个id,第一个id用于定位,第二个才是要插入的id
        //前面有ID就用前面的,没有就用后面的ID
        var ids = '';
        var sortType = -1;
        if (index == 0) {
            if ($(to).children()[index + 1]) {
                sortType = 1;
                ids = $(item).attr("id") + "," + $($(to).children()[index + 1]).attr("id");
            } else {
                ids = $(item).attr("id");
            }


        } else {
            sortType = 0;
            ids = $($(to).children()[index - 1]).attr("id") + "," + $(item).attr("id");
        }
        //请求后台ajax 完成拖拽排序
        addToCourseSort(ids, type, sortType);
    }

    function delCard(id, type) {
        layer.confirm('从该列表中删除该课程?', {
                icon: 3,
                title: '提示'
            },
            function (index) {
                $.ajax({
                    url: origin + "***",
                    dataType: 'json',
                    data: {
                        "course_type": type,
                        "course_id": id
                    },
                    success: function (data) {

                        if (type == 1) {
                            hotCIds = data.tempObj;
                            $("#hotTab #" + id).remove();
                            for (var i = 0, len = $("#hotTab").children().length; i < len; i++) {
                                $($("#hotTab").children()[i].firstChild).text(i + 1);
                            }
                            if (data.status == 0) {
                                pagingHot.total -= 1;
                            }
                            hotpage.render({
                                elem: 'hotTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                                ,
                                count: pagingHot.total //数据总数,从服务端得到
                                ,
                                limit: pagingHot.pageSize,
                                groups: 3,
                                curr: pagingHot.currentPage,
                                jump: function (obj, first) {
                                    if (obj.curr != pagingHot.currentPage) {
                                        pagingHot.currentPage = obj.curr;
                                        listTabCourses(1, $("#recommendTab"));
                                    }
                                }
                            });
                        } else if (type == 2) {
                            recommendCIds = data.tempObj;
                            $("#recommendTab #" + id).remove();
                            for (var i = 0, len = $("#recommendTab").children().length; i < len; i++) {
                                $($("#recommendTab").children()[i].firstChild).text(i + 1);
                            }

                            if (data.status == 0) {
                                pagingRecommend.total -= 1;
                            }
                            recommendpage.render({
                                elem: 'recommendTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                                ,
                                count: pagingRecommend.total //数据总数,从服务端得到
                                ,
                                limit: pagingRecommend.pageSize,
                                groups: 3,
                                curr: pagingRecommend.currentPage,
                                jump: function (obj, first) {
                                    if (obj.curr != pagingRecommend.currentPage) {
                                        pagingRecommend.currentPage = obj.curr;
                                        listTabCourses(2, $("#recommendTab"));
                                    }
                                }
                            });
                        } else if (type == 3) {
                            vipNewCIds = data.tempObj;
                            $("#vpiNewTab #" + id).remove();
                            for (var i = 0, len = $("#vpiNewTab").children().length; i < len; i++) {
                                $($("#vpiNewTab").children()[i].firstChild).text(i + 1);
                            }

                            if (data.status == 0) {
                                pagingl.total -= 1;
                            }
                            viplaypage.render({
                                elem: 'vpiNewTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                                ,
                                count: pagingl.total //数据总数,从服务端得到
                                ,
                                limit: pagingl.pageSize,
                                groups: 3,
                                curr: pagingl.currentPage,
                                jump: function (obj, first) {
                                    if (obj.curr != pagingl.currentPage) {
                                        pagingl.currentPage = obj.curr;
                                        listTabCourses(3, $("#vpiNewTab"));
                                    }
                                }
                            });
                        } else if (type == 4) {
                            comingCIds = data.tempObj;
                            $("#comingTab #" + id).remove();
                            for (var i = 0, len = $("#comingTab").children().length; i < len; i++) {
                                $($("#comingTab").children()[i].firstChild).text(i + 1);
                            }

                            if (data.status == 0) {
                                pagingComing.total -= 1;
                            }
                            comingpage.render({
                                elem: 'comingTabPagging' //注意,这里的 test1 是 ID,不用加 # 号
                                ,
                                count: pagingComing.total //数据总数,从服务端得到
                                ,
                                limit: pagingComing.pageSize,
                                groups: 3,
                                curr: pagingComing.currentPage,
                                jump: function (obj, first) {
                                    if (obj.curr != pagingComing.currentPage) {
                                        pagingComing.currentPage = obj.curr;
                                        listTabCourses(4, $("#comingTab"));
                                    }
                                }
                            });
                        }
                        layer.close(index);
                    }
                });

            });

    }

    //渲染页面
    //left: 1-渲染左边的tab,0-渲染右边 
    //type:排序板块:1-热门课程 2-最新课程 3-会员免费课程 4-即将上架课程
    function createCard(data, oContainer, left, type) {
        var html = "";
        for (var i = 0; i < data.length; i++) {
            html += '<div id="' + data[i].id +
                '" name="courseName" class="imgcard" style="margin-left: 30px; margin-top: 30px;">'
            if (left == 1) {
                html += '<span class="layui-badge layui-bg-orange sort" style="position:absolute;left:0;">' +
                    (i + 1) +
                    '</span><i class="layui-icon" onclick="delCard(&apos;' + data[i].id + '&apos;,' + type +
                    ')" style="position:absolute;right:0;color:#fff;background-color:#D9001B;cursor:pointer;">&#xe640;</i>';
            }
            html += '<img src="' + data[i].cover_m + '" class="card-img" />' +
                '<div><p class="card-word">' + data[i].title + '</p></div>';
            //状态判断
            if (0 == data[i].status) {
                html += '<div style="width:50px;height:16px;background-color:#D9001B;color:#fff;font-size: 12px;">待上架</div>';
            } else if (1 == data[i].status) {
                html += '<div style="width:50px;height:16px;background-color:#70B603;color:#fff;font-size: 12px;">上架</div>';
            } else if (2 == data[i].status) {
                html += '<div style="width:50px;height:16px;background-color:#AAAAAA;color:#fff;font-size: 12px;">已下架</div>';
            } else if (3 == data[i].status) {
                html += '<div style="width:50px;height:16px;background-color:#AAAAAA;color:#fff;font-size: 12px;">暂停销售</div>';
            } else if (5 == data[i].status) {
                html += '<div style="width:50px;height:16px;background-color:#F59A23;color:#fff;font-size: 12px;">即将上架</div>';
            }

            html +=
                '<div style="text-align: left; padding-left: 3px; padding-right: 3px; position: absolute; bottom: 0; width: 100%;">';

            if (!data[i].vip_price) {
                html += '<span class="course-price-status">' + data[i].price + '</span> ';
            } else if (data[i].vip_price == 0) {
                html += '<span class="course-price-status">免费</span> ';
            } else {
                html += '<span class="course-price-status">' + data[i].vip_price + '</span> ';
            }
            html += '<span class="course-bottom" style="text-decoration: line-through;">¥' + data[i].show_price + '</span>';
            html += '<span class="course-bottom" style="right: 13px; position: absolute; bottom: 0;">' + data[i].study_num +
                '人在学</span></div></div>';
        }
        oContainer.html(html);
    }
</script>
</html>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值