zoukankan      html  css  js  c++  java
  • JQuery实现个性化,可以拖拽 自定义自己的界面(三)

    上次说数据库表的设计;今天我主要介绍主要js函数;共感兴趣的读者参考。

    1.GetUser函数; 获取用户信息;在这里我想说的是匿名用户的处理;正常登陆网站的用户,我们可以从库里读取到信息,主要及时显示几个Tab; 至于有多少个

    widget,呵呵,我认为那不是GetUser应该做的,每一个Tab应该知道自己有几个Widget,以及显示在什么位置;呵呵扯远了。 回正题匿名用户的处理,很简单那就是

    cookie,我想igoogle以及其他的一些著名网站也是这么做的。把匿名用户在首页上做的设置存放到cookie里,也就是说打开首页,首先检查是不是登陆用户,如果是显示我们存放到库里的信息,如果不是看看有没有cookie信息,如果还没有那就给他个默认信息好了;

    代码
     1 function GetUser() {
     2 
     3     $.ajax({
     4 
     5         url: "Service/GetUser.ashx",
     6         type: "POST",
     7         success: function(returnValue) {
     8 
     9             if (returnValue == "0") {
    10             }
    11             else {
    12             }
    13         }
    14     });
    15 }
    16 

    2.GetTabByUser()函数; 获取登录用户的Tab个数;该函数用到了一个ChangTab 在下面解释;

    代码
     1 /**
     2 *每一个li记录着该页的 列数、给页面的唯一ID,名称Title
     3 */
     4 function GetTabByUser()
     5 {
     6     $.ajax({
     7     
     8         url : "Service/GetTabs.ashx",
     9         cache : false,
    10         success : function(returnValue){            
    11             RemoveLoading();            
    12             $('.default_AddNewPages').before(returnValue);            
    13             $('.GetTabs_Ll_Title').bind('click',ChangTab);                        
    14             if($('.GetTabs_Ll_Title').size() > 0){            
    15                 $('.GetTabs_Ll_Title').eq(0).click();                
    16             }
    17         },
    18         beforeSend : function(){        
    19             AddLoading();        
    20         }
    21     });
    22 }

    3.ChangTab();该函数的触发是发生在用户点击了tab的title时候。一个简单的切换。

    代码
     1 function ChangTab()
     2 {
     3     var t = $(this).parent('.default_Tabs_Checked').html();
     4     
     5     if(t!=null)
     6     {
     7         //如果选择了该页面则 点击的时候不加载数据!
     8     }
     9     else
    10     {
    11         var page_li = $(this).parent('.GetTabs_Ll');
    12     
    13         PageCheck(page_li);
    14         
    15         var columsCount = page_li.attr('clsCount');
    16         
    17         SetLayOut(columsCount); //根据tab的列,定义页面的布局。
    18         
    19         var tabID = page_li.attr('tabID'); 
    20         
    21         AddMoudles(tabID); //根据tabid,查找widget
    22     }
    23 }

    4. 如注释

    代码
     1 /*
     2 该函数很简单,就是把其他tab样式去掉,把点击当前的tab添加样式。
     3 */
     4 function PageCheck(page_li)
     5 {
     6     $('.GetTabs_Ll').removeClass('default_Tabs_Checked');
     7     $('.GetTabs_Ll_Down').hide();
     8     $('.GetTabs_Ll_Down_Area').hide();
     9     
    10     page_li.addClass('default_Tabs_Checked');
    11 }
    12 

    5. SetLayOut 定义tab的布局。同时引用了Jquery的拖拽功能。在整个自定义页面中拖拽是主要的功能,需要保存住用户的自定义设置信息;

    代码中:update: function(event,ui){SortAction(event,ui,"update")}  ,这个是jqeruy ui sortable中的事件;

    SortAction是一个我们定义的函数,意思是说widget更新位置的时候执行SortAction函数;

    代码
     1 function SetLayOut(num)
     2 {
     3     switch (parseInt(num))
     4     {
     5         case 1 : $("#default_columns").html('<ul id="column1" style="98%;"></ul>');break;
     6         case 2 : $("#default_columns").html('<ul id="column1" style="45%;"></ul><ul id="column2" style="45%;"></ul>');break;
     7         case 3 : $("#default_columns").html('<ul id="column1" style="31%;"></ul><ul id="column2" style="31%;"></ul><ul id="column3" style="31%;"></ul>');break;
     8         default :  $("#default_columns").html('<ul id="column1" style="32%"></ul><ul id="column2" style="32%"></ul><ul id="column3" style="32%"></ul>');break;
     9     }
    10     
    11     $(function() {
    12         $("#column1,#column2, #column3").sortable({
    13         placeholder: 'sortHelper' , //样式
    14         handle : ".Widget_Head",
    15         connectWith: '.ui-sortable',//多列可以拖动
    16         helper: 'clone'//必须添加该属性 否则ie8以下的浏览器不支持
    17         opacity: 0.8,
    18         scroll: false ,    
    19         update: function(event,ui){SortAction(event,ui,"update")}
    20         }).disableSelection();
    21     });    
    22 }

    6.持久化;需要注意的是我们不仅需要知道当前widget的位置,还需要知道要拖拽到那一列;

    比如从第一列拖拽到第二列,那么第二列需要重新排序;因为要记录在地二列的位置;

    代码
     1 function SortAction(event,ui,eventName)
     2 {    
     3     switch(eventName)
     4     {                    
     5         case "update":
     6             WidgetUpdate(event,ui);
     7             break;
     8     }
     9 }
    10 
    11 /**
    12 更新widget的列和该列的位置
    13 */
    14 function WidgetUpdate(event,ui)
    15 {
    16     var widgetIndex = [];
    17     
    18     var currentWidgetID = ui.item.find('.Widget_Head').attr('widgetid');//获得当前的widgetID
    19     
    20     var targetColumnID = event.target.id;//获得当前的列ID
    21     
    22     var columnID = targetColumnID.substring(targetColumnID.length-1,targetColumnID.length);//去掉#column 保留整数1
    23     
    24     var liQuery = $("#" + targetColumnID + " li").filter('.Widget_Main');//获得该列的所有li 包括父级元素ul
    25     
    26     var tabID = $(".default_Tabs_Checked").attr("tabid");
    27 
    28     liQuery.each(function(){    
    29 
    30         var widget = {};
    31         
    32         widget.ID = $(this).find('.Widget_Head').attr('widgetid');
    33         
    34         widgetIndex.push(widget);
    35     });
    36     
    37     var obj = "";
    38     
    39     for(var m=widgetIndex.length-1;m>=0;m--)
    40     {
    41         obj = widgetIndex[m].ID + "|" + obj;
    42     }
    43     
    44     if(obj != "")
    45     {
    46         var parms = "allWidgetID="+obj+"&columnID="+columnID+"&currentWidgetID="+currentWidgetID+"&tabID="+tabID;
    47                 
    48         $.ajax({
    49         
    50             url : "Service/DropWidget.ashx",
    51             
    52             type : "POST",
    53             
    54             data : parms,
    55             
    56             success:function(returnXml){}
    57         
    58         });//end ajax
    59     }//end if
    60 }
    61 

    不贴了,这只是部分函数,算是主要的吧;其他根据我们的需要还可能会添加很多;主要是理清思路吧。呵呵使用jquery可以很方便的帮我们实现一些功能。

    如果大家有不清楚的地方,欢迎和我沟通。呵呵  谢谢你抽出时间看这篇文章。

    Demo:http://xiaoguan1985.36jhw.dnscnc.com/ 

    作者:管宇

    欢迎转载,请标明出处。

  • 相关阅读:
    hdu 5224 Tom and paper 水题
    2015 UESTC 搜索专题N题 韩爷的梦 hash
    2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
    2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
    2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
    2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
    2015 UESTC 搜索专题E题 吴队长征婚 爆搜
    2015 UESTC 搜索专题D题 基爷的中位数 二分
    2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
    2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
  • 原文地址:https://www.cnblogs.com/winner2009/p/1779301.html
Copyright © 2011-2022 走看看