1

我在这里遇到了很多问题,请在此处查看此网站。当我单击灰色按钮时,它将显示,如果我再次单击它,它将隐藏。但是,如果我拖动(在拖动开始时)按钮以显示我不能再单击打开或关闭的内容,我现在不知道有什么问题。当我检查代码并单击按钮时,我可以看到 .nursebutton 改变了它的值(从 0 -> 275 和 -275 -> 0)。我不知道是什么可能导致该功能slideNurse()无法正常执行。

我正在将“扩展” jquery.event.drag与其他 Jquery 一起使用,也许这就是问题所在?你们中有人遇到过这个问题吗?你有一个聪明的替代解决方案来解决我的问题吗?我想要拖动功能和“点击”功能动画。

下面是jquery代码。

谢谢 =)

var showing = false;
jQuery(function($){
var $div = $('#container');
  $('.nursebutton')
      .drag("start",function( ev, dd ){
         dd.limit = $div.offset();
         dd.limit.right = dd.limit.left + $div.outerWidth() - $( this ).outerWidth();              
      })
      .drag(function( ev, dd ){
         $( this ).css({
            left: Math.min( dd.limit.right, Math.max( dd.limit.left, dd.offsetX ) )

         });
         $('#nurseView').css({
            left: Math.min( dd.limit.right, Math.max( dd.limit.left, dd.offsetX ) )
        });
      })
      .drag("end",function(ev, dd ){
         var treshold = dd.offsetX;
         var menu = $('#nurseView');
         if(treshold>1712){
                $("#nurseView").animate({"left": "1872px"}, "fast");
                $(".nursebutton").animate({"left": "1872px"}, "fast");
         }
         else{
            $("#nurseView").animate({"left": "1595px"}, "fast");
            $(".nursebutton").animate({"left": "1595px"}, "fast");
         }               
      });
});

function slideNurse(){//This function works before I "activate thejquery function above
    if (!showing) {
        showing = true;
        $("#nurseView").animate({"right": "+=275px"}, "slow");
        $(".nursebutton").animate({"right": "+=275px"}, "slow");
    } else {
        showing = false;
        $("#nurseView").animate({"right": "-=275px"}, "slow");
        $(".nursebutton").animate({"right": "-=275px"}, "slow");
    }
}
4

2 回答 2

0

将 jquery 代码更改为下面的代码,它可以正常工作(嗯,不完美,第一次搞砸了,所以我不得不添加一个布尔值来跟踪它是否第一次运行)

var showing = false;
var first = false;
    jQuery(function($){
    var $div = $('#DragNursecontainer');
      $('.nursebutton')
            .click(function(){
                if(first ==true){
            if (!showing) {
                showing = true;
                $("#nurseView").animate({"left": "1595px"}, "fast");
                $(".nursebutton").animate({"left": "1595px"}, "fast");
            } else {
                showing = false;
                $("#nurseView").animate({"left": "1872px"}, "fast");
                $(".nursebutton").animate({"left": "1872px"}, "fast");
            }
                }
                else{
                    first = true;

                if (!showing) {
                showing = true;
                $("#nurseView").hide(5);
                $("#nurseView").animate({"left": "1595px"}, "fast");
                $("#nurseView").show(5);
                $(".nursebutton").hide(5);
                $(".nursebutton").animate({"left": "1595px"}, "fast");
                $(".nursebutton").show(5);
                } else {
                showing = false;
                $("#nurseView").animate({"left": "1872px"}, "fast");
                $(".nursebutton").animate({"left": "1872px"}, "fast");
                }   //slideNurse();
                }
          })
          .drag("start",function( ev, dd ){
             dd.limit = $div.offset();
             dd.limit.right = dd.limit.left + $div.outerWidth() - $( this ).outerWidth();              
          })
          .drag(function( ev, dd ){
             $( this ).css({
                left: Math.min( dd.limit.right, Math.max( dd.limit.left, dd.offsetX ) )

             });
             $('#nurseView').css({
                left: Math.min( dd.limit.right, Math.max( dd.limit.left, dd.offsetX ) )
            });
          })
          .drag("end",function(ev, dd ){
             var treshold = dd.offsetX;
             var menu = $('#nurseView');
             if(treshold>1712){
                    showing = false;
                    $("#nurseView").animate({"left": "1872px"}, "fast");
                    $(".nursebutton").animate({"left": "1872px"}, "fast");
             }
             else{
                showing = true;
                $("#nurseView").animate({"left": "1595px"}, "fast");
                $(".nursebutton").animate({"left": "1595px"}, "fast");
             }               
          });
    });
于 2013-05-16T19:49:55.590 回答
0

我认为使用一些适当的 HTML 和 CSS,您可以拥有一个动画而不是 2 个。无论如何,它们都朝着同一个方向发展,对吧?

所以对于 HTML 部分,我会确保容器实际上包含一些东西。把它们包起来似乎是正确的方法。

对于 CSS,我position: relative将主容器与position: absolute内部容器组合在一起。查看小提琴以获取更多更改。一旦设置好,我就开始删除额外的动画。

实际的拖动可以使用 jQuery UI 完成。无论您是使用整个库还是仅可拖动的部分都取决于您。

/// <reference path="jQuery 1.9.1" />
/// <reference path="jQuery UI 1.9.2" />
// local vars
var showing = false,
    nurseContainer = $('#nurseContainer'),
    nurseButton = $("#nurseContainer a.nursebutton"),
    nurseView = $("#nurseView");

// drag event: jquery ui can filter much for you
nurseContainer.draggable(
    { 
        axis: "x",
        handle: nurseButton,
        containment: nurseView,
        drag: function(ev, ui){
            // small css position correction
            if (ui.position.left <= 50){
                ui.position.left = 50;
            }
        }
    }
);

// click event: with mouseup you don't fire extra events
nurseButton.mouseup(function(){
    if (!showing) {
        showing = true;
        nurseContainer.animate({ left: 50 }, 400);
    } else {
        showing = false;
        nurseContainer.animate({ left: 325 }, 400); // 50 + 275
    }
});

注意我使用尽可能少的字符串值来保持它的干净和可读性。希望您可以通过此示例微调您的要求。

演示 http://jsfiddle.net/tive/AnVfh/

jQuery UI API http://api.jqueryui.com/draggable/

于 2013-05-16T23:26:38.147 回答