代码之家  ›  专栏  ›  技术社区  ›  dihakz

如何让jQuery从最后一个位置设置动画到新位置?

  •  0
  • dihakz  · 技术社区  · 8 年前

    我在Firefox和IE中都使用并测试了以下代码。Firefox工作正常(根据当前位置将元素移动到新位置),但IE失败。它 总是 采用 起初的 位置,然后设置动画到所需位置。Firefox方式是我希望它的工作方式(相对于 当前位置 而不是从 原始位置 .

    $("a#pack1").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '8px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "0px"}, 1000);
    				});
    				$("a#pack2").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '52px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-590px"}, 1000);
    				});
    				$("a#pack3").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '95px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-1150px"}, 1000);
    				});
    				$("a#pack4").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '138px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-1740px"}, 1000);
    				});
    				$("a#pack5").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '181px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-2397"}, 1000);
    				});
    				$("a#pack6").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '224px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-3064px"}, 1000);
    				});
    				$("a#pack7").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '268px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-3700px"}, 1000);
    				});
    				$("a#pack8").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '311px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-4256px"}, 1000);
    				});
    				$("a#pack9").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '350px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-4885px"}, 1000); //medical surveillance
    				});
    				$("a#pack10").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '394px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-5495px"}, 1000); //scheduler
    				});
    				$("a#pack11").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '438px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-6110px"},1000); //rehab reminder
    				});
    				$("a#pack12").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '480px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-6720px"}, 1000); //cost
    				});
    				$("a#pack13").click(function (){
    					$('#solutions').animate({
    						'background-position-x': '9px',
    						'background-position-y': '525px'
    					},1000,'linear');
    					$('#content-data').animate({marginTop: "-7324px"}, 1000); //legal
    				});
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="solutions">
    		<ul>
    				<li><a id="pack1" href="javascript:void(0);">Leave</a></li>
    					<li><a id="pack2" href="javascript:void(0);">Job Links</a></li>
    					<li><a id="pack3" href="javascript:void(0);">Non Work Related</a></li>
    					<li><a id="pack4" href="javascript:void(0);">Work Related</a></li>
    
    					<li><a id="pack5" href="javascript:void(0);">Safety</a></li>
    					<li><a id="pack6" href="javascript:void(0);">Ergonomics</a></li>
    					<li><a id="pack7" href="javascript:void(0);">Industrial Hygiene</a></li>
    
    					<li><a id="pack8" href="javascript:void(0);">Medical</a></li>
    					<li><a id="pack9" href="javascript:void(0);">Medical Surveillance</a></li>
    					<li><a id="pack10" href="javascript:void(0);">Scheduler</a></li>
    					<li><a id="pack11" href="javascript:void(0);">Rehab Reminder</a></li>
    					<li><a id="pack12" href="javascript:void(0);">Cost</a></li>
    					<li><a id="pack13" href="javascript:void(0);">Legal</a></li>
    			</ul>
    	</div>
    2 回复  |  直到 8 年前
        1
  •  1
  •   Zenoo    8 年前

    通过传递 background-position-x , background-position-y margin-top 通过HTML属性和添加公共类的值 pack 链接如下:

    <a id="pack1" class="pack" data-position-x="9px" data-position-y="8px" data-margin-top="0px" href="javascript:void(0);">Leave</a>
    

    接下来要做的就是向元素的CSS添加一些转换:

    #content-data{ transition: all 1s; }
    #solutions{ transition: all 1s linear; }
    

    最后,概括Javascript单击处理程序以检索这些属性:

    $("#solutions .pack").click(function() {
      $('#solutions').css({
        'background-position-x': $(this).attr('data-position-x'),
        'background-position-y': $(this).attr('data-position-y')
      });
      $('#content-data').css('margin-top', $(this).attr('data-margin-top'));
    });
    

    $("#solutions .pack").click(function() {
      $('#solutions').css({
        'background-position-x': $(this).attr('data-position-x'),
        'background-position-y': $(this).attr('data-position-y')
      });
      $('#content-data').css('margin-top', $(this).attr('data-margin-top'));
    });
    #content-data{
      width: 50px;
      height: 50px;
      background-color: red;
      transition: all 1s;
    }
    
    #solutions{
      background-image: url(https://bennettfeely.com/gradients/img/gradient_24.png);
      background-position: 0 0;
      transition: all 1s linear;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="solutions">
      <ul>
        <li><a id="pack1" class="pack" data-position-x="9px" data-position-y="8px" data-margin-top="0px" href="javascript:void(0);">Leave</a></li>
        <li><a id="pack2" class="pack" data-position-x="9px" data-position-y="52px" data-margin-top="100px" href="javascript:void(0);">Job Links</a></li>
        <li><a id="pack3" class="pack" data-position-x="9px" data-position-y="95px" data-margin-top="200px" href="javascript:void(0);">Non Work Related</a></li>
      </ul>
    </div>
    <div id="content-data"></div>
        2
  •  1
  •   Achim Udo    8 年前

    这是一种肮脏的黑客行为。 您可以使用背景横排动画制作一个div,如下图所示,其中包含一个绝对div(#bg):

    <div id="solutions">
    <div id="bg"></div>
    <ul>
            <li><a id="pack1" class="test" href="javascript:void(0);">Leave</a></li>
                <li><a id="pack2" class="test" href="javascript:void(0);">Job Links</a></li>
                <li><a id="pack3" class="test" href="javascript:void(0);">Non Work Related</a></li>
                <li><a id="pack4" class="test" href="javascript:void(0);">Work Related</a></li>
    
    
        </ul>
    

    jsfiddle