zoukankan      html  css  js  c++  java
  • jQuery实现百度导航li拖放排列效果,即时更新数据库

    index.php中 var autoSave = false; 控制不自动提交。

    index.php
    <?php
        require 'db.php';
        $query = "SELECT `id`,`order`,`name` FROM `limove` ORDER BY `order`";
        $lis = mysql_query($query,$conn);
        $li_count = mysql_num_rows($lis);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>li Move</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Language" content="zh-CN" />
        <meta name="Keywords" content="" />
        <meta name="Description" content="" />
        <script type="text/javascript" src="jquery-1.6.2.min.js"></script>
    </head>
    <body>
    <style>
        ul{
            border: 1px solid red;
            height: 150px;
            margin: auto;
            width: 745px;
        }
    
        li{
            border: 1px solid #AABBCC;
            float: left;
            list-style: none outside none;
            margin: 10px;
            text-align: center;
            width: 120px;
            cursor: move;
        }
        #reset{
            border: 1px solid #AABBCC;
            cursor: pointer;
            float: right;
            height: 20px;
            padding: 2px;
            width: 40px;
        }
        #save{
            border: 1px solid #AABBCC;
            cursor: pointer;
            float: right;
            height: 20px;
            padding: 2px;
            width: 40px;
        }
    </style>
    <div id="reset">Reset</div>
    <div id="save">Save</div>
    <ul>
        <?php
            while($li = mysql_fetch_assoc($lis)){
                echo '<li id="'.$li['id'].'" order="'.$li['order'].'">'.$li['name'].'</li>';
            }
        ?>
    </ul>
    <script type="text/javascript">
        $(document).ready(function(){
            $("ul").css({height:<?php echo (ceil($li_count/5)*40+10) ?>});
            var on_move_li = '';
            var on_move_li_offset = '';
            var on_move_li_index = '';
            var autoSave = false;
            function bindMoveListening(){
                $("li").mousedown(function(){
                    on_move_li_offset = $(this).offset();
                    on_move_li = $(this);
                    on_move_li_index = on_move_li.prevAll().length;
                    if(on_move_li_index == 0) var index = 1;
                    else var index = on_move_li_index;
                    //创建空li
                    $("ul").children("li").eq(index-1).after('<li class="dashed" style="border:1px dashed #AABBCC">&nbsp;</li>')
                    on_move_li.addClass('moving').css({left:on_move_li_offset.left,top:on_move_li_offset.top,position:'absolute','z-index':3,border:'1px dashed #AABBCC'});
                    $("ul").mousemove(function(e){
                        if($(this).find(".moving").length != 0) {
                            var clientX = e.clientX-60;
                            var clientY = e.clientY-20;
                            on_move_li.css({left:clientX,top:clientY});
                        }
                    });
                    $("ul").mouseup(function(e){
                        if($(this).find(".moving").length != 0) {
                            var clientX = e.clientX;
                            var clientY = e.clientY;
                            var times = Math.floor((clientY-(on_move_li_offset.top+10))/42);
                            var index = (times*5)+(Math.floor((clientX-(on_move_li_offset.left+50))/120)+on_move_li_index);
                            if(index > <?php echo $li_count ?>) index = <?php echo $li_count ?>;
                            on_move_li.attr('class',null).attr('style',null);
                            $(".dashed").remove();
                            var fromid = on_move_li.attr('id');
                            var fromorder = on_move_li.attr('order');
                            var toorder = $("ul").children("li").eq(index).attr('order');
                            if(index == on_move_li_index && index>0) index = index-1;
                            
                            if(on_move_li_index == 0 && (index == -1||index == 0) ) $("ul").children("li").eq(1).before(on_move_li);
                            else if(index == -1) $("ul").children("li").eq(0).before(on_move_li);
                            else $("ul").children("li").eq(index).after(on_move_li);
                            if(autoSave){
                                $.ajax({
                                    url:'limove_process.php',
                                    type:'POST',
                                    data:{'fromid':fromid,'fromorder':fromorder,'toorder':toorder},
                                    success:function(newdata){
                                        $("ul").empty().append(newdata);
                                        bindMoveListening();
                                    }
                                });
                            }
                        }
                    });
                });
                $("#reset").click(function(){
                    $.ajax({
                        url:'limove_reset.php',
                        type:'POST',
                        success:function(newdata){
                            $("ul").empty().append(newdata);
                            bindMoveListening();
                        }
                    });
                });
                $("#save").click(function(){
                    var data = '';
                    var lis = $("ul").children("li");
                    $.each(lis,function(i){
                        data += lis.eq(i).attr('id')+',';
                    });
                    $.ajax({
                        url:'limove_save.php',
                        type:'POST',
                        data:{'data':data.substr(0,data.length-1)},
                        success:function(newdata){
                            $("ul").empty().append(newdata);
                            bindMoveListening();
                        }
                    });
                });
            }
            bindMoveListening();
        });
    </script>
    </body>
    </html>
    db.php
    <?php
    static $connect = null;
    static $table = '';
    if(!isset($connect)) {
        $connect = mysql_connect("localhost","root","");
        if(!$connect) {
            $connect = mysql_connect("localhost","Zjmainstay","");
        }
        if(!$connect) {
            die('Can not connect to database.Fatal error handle by /test/db.php');
        }
        mysql_select_db("test",$connect);
        mysql_query("SET NAMES utf8",$connect);
        $conn = &$connect;
        $db = &$connect;
    }
    自动提交处理文件 limove_process.php
    <?php
        require 'db.php';
        $fromid = $_POST['fromid'];
        $fromorder = $_POST['fromorder'];
        $toorder = $_POST['toorder'];
        $updateorder = $toorder;
        $eqf = '';
        $eqt = '=';
        $symbol = '-';
        $notZero = 'AND `order`>1';
        if($fromorder > $toorder){
            $eqf = '=';
            $eqt = '';
            $symbol = '+';
            $fromorder = $toorder;
            $toorder = $_POST['fromorder'];
            $updateorder = $fromorder;
            $notZero = '';
        }
        mysql_query("START TRANSACTION",$conn);
        
        $query = "UPDATE `limove` SET `order`=`order`{$symbol}1 WHERE (`order`>{$eqf}{$fromorder} AND `order`<{$eqt}{$toorder} {$notZero})";
        $return1 = mysql_query($query,$conn);
        $query = "UPDATE `limove` SET `order`={$updateorder} WHERE `id`={$fromid}";
        $return2 = mysql_query($query,$conn);
        
        if($return1&$return2){
            mysql_query("COMMIT",$conn);
        }else {
            mysql_query("ROLLBACK",$conn);
        }
        $query = "SELECT `id`,`order`,`name` FROM `limove` ORDER BY `order`";
        $lis = mysql_query($query,$conn);
        while($li = mysql_fetch_assoc($lis)){
            echo '<li id="'.$li['id'].'" order="'.$li['order'].'">'.$li['name'].'</li>';
        }
        exit(0);
    保存按钮处理文件 limove_save.php
    <?php
        require 'db.php';
        $data = explode(',',$_POST['data']);
        mysql_query("START TRANSACTION",$conn);
    
        $return = 1;
        foreach($data as $order => $id){
            $order++;
            $query = "UPDATE `limove` SET `order`={$order} WHERE `id`={$id}";
            $return = mysql_query($query,$conn)&$return;
        }
    
        if($return){
            mysql_query("COMMIT",$conn);
        }else {
            mysql_query("ROLLBACK",$conn);
        }
        $query = "SELECT `id`,`order`,`name` FROM `limove` ORDER BY `order`";
        $lis = mysql_query($query,$conn);
        while($li = mysql_fetch_assoc($lis)){
            echo '<li id="'.$li['id'].'" order="'.$li['order'].'">'.$li['name'].'</li>';
        }
        exit(0);
    重置按钮处理文件 limove_reset.php
    <?php
        require 'db.php';
        mysql_query("UPDATE limove SET `order`=`id`");
        $query = "SELECT `id`,`order`,`name` FROM `limove` ORDER BY `order`";
        $lis = mysql_query($query,$conn);
        while($li = mysql_fetch_assoc($lis)){
            echo '<li id="'.$li['id'].'" order="'.$li['order'].'">'.$li['name'].'</li>';
        }
        exit(0);

    jquery-1.6.2.min.js文件下载: jquery-1.6.2.min.js

    软件包下载:下载

    目录包含文件,如下图:

    程序运行后界面:

  • 相关阅读:
    先装.NET SDK 后装IIS导致的错误
    proc
    C# FTP上传
    English Word
    Window服务程序
    DataView排序 疑惑
    移除字符串末尾制定个数字符
    树状列表
    updatepanel 中按钮下载文件出错解决
    如何删除vs最近打开的项目
  • 原文地址:https://www.cnblogs.com/Zjmainstay/p/jQuery_limove.html
Copyright © 2011-2022 走看看