【问题标题】:roll up and open a page on click卷起并单击打开页面
【发布时间】:2012-11-08 18:00:03
【问题描述】:

我想做的是:

  • 点击按钮后,页面的一部分(实际按钮所在的位置 + 更多项目)被卷起(向上滑动),完成后
  • 用户被带到另一个页面

到目前为止我所做的代码如下(显然不起作用):

<div id="content">
    <div>
        <p>something anything</p>
        ...
    </div>
<a id="roll"><img src="_images/butt-submit.png"></a>

</div>


<script>

$('#roll').click(function() {
     $('#content').animate({
          "width" : "100%",
          "height" : "0px"
         }, function() {
     $(this).load('index2.html');
        });
});

</script>

你能帮我解决这个问题吗?

【问题讨论】:

    标签: jquery jquery-animate slide


    【解决方案1】:

    正如JSFiddle 所示,这应该可以解决问题

    $("#roll").click(function() {
         $("#content").animate({
              width: "100%",
              height: "0px"
         }, function() {
             window.location.href = "index2.html";
         });
    });
    

    但是,除了使用animate,您还可以使用slideUp 并简化您的代码:

    $("#roll").click(function() {
         $("#content").slideUp(function() {
             window.location.href = "index2.html";
         });
    });
    

    为什么是location.href 而不仅仅是location

    如您所见,我使用了window.location.href,而我可以轻松地使用:

    window.location = "index2.html";
    

    这同样可以跨浏览器工作,但由于window.location 是一个对象,因此如果您使用更长的符号并定位特定的字符串属性会更清楚。

    正确的script 块定义

    您似乎也没有提供脚本块语言,这是as per HTML specification 的要求。第一句话说这是必须的:

    HTML 4.01
    18.2.2 指定脚本语言

    必须为文档中的每个 SCRIPT 元素实例指定类型属性

    在您的情况下,这意味着必须为 script 块提供语言,否则它们可能不会首先被识别为脚本块:

    <script type="text/javascript">
    ...
    </script>
    

    【讨论】:

    • 不幸的是,由于某种原因,这个没有工作。根本没有点击操作:(
    • @PiotrCiszewski:我创建了一个 JSFiddle 来证明它有效。我使用了您的 HTML 和我的代码,另外将 animate 替换为 slideUpClick here. Works. 如果它在您的页面上不起作用,请检查您的控制台是否有 javascript 错误。您的脚本中一定还有其他错误。
    • 我会在我的代码中搜索任何问题。非常感谢@RobertKoritnik。这是完美的。
    • 我在这里这样做了:link 但它不起作用。它适用于您在jsfiddle.net 上的链接。为什么会这样?我放弃了... :(
    • @PiotrCiszewski:尝试将 type 设置为您的 script 元素,以便浏览器将其识别为 javascript 块。 type="text/javascript"。根据规范,您必须提供脚本的语言。
    【解决方案2】:

    如果您想将页面加载到content 元素中(因为您正在使用加载方法),您可以使用slideUp()slideDown() 方法,目前您正在设置@ 987654324@改为0,看不到加载的内容。

    $(function() { // when the DOM is ready
       $('#roll').click(function(event) {
           event.preventDefault() // prevent the default action of the event
           $('#content').slideUp(function() {
                $(this).load('index2.html', function(){ // when load is complete
                   $(this).slideDown() // slide down the #content element 
                });
           });
       });
    })
    

    如果你想将用户重定向到另一个页面,你可以使用window.location.href,但为什么不使用href属性:

    <a id="roll" href='index2.html'><img src="_images/butt-submit.png"></a>
    

    【讨论】:

    • 确实,就像@RobertKoritnik 提到的那样,但这部分有效。同样当我应用这个时 - 空的 div 滑下来,里面没有内容,但我相信这是一个不同的问题。还是谢谢
    • 我已经应用了这个代码,但是再次 - 在它成功滑动之后,它会以一个空的#content div 向下滑动。没有重定向到 index2.html。我怎样才能完成这个?它几乎可以工作了
    • @PiotrCiszewski 不客气,请注意load 会加载整个页面,如果您要加载特定元素的内容,请首先确保路径正确,然后您可以选择该元素加载完毕,可以打码$(this).load('index2.html #idOfAnElement')
    • 谢谢你。我会把它写下来以备不时之需,因为它肯定会有用。如何在同一个窗口中打开整个页面而不是从另一个窗口加载元素?我已将 href 添加到我的 中,但它仍然不起作用。所以基本上我希望#content向上滑动,然后将所有内容重定向到新页面,所以新页面在同一个窗口中打开,就像普通的url一样。
    • @PiotrCiszewski 欢迎您,正如其他答案提到的,您可以使用window.location.href = index2.html,您可以替换所有与load方法相关的代码并使用window.location.href。跨度>
    【解决方案3】:

    线

    $(this).load('index2.html');
    

    用于 AJAX 将第二个页面加载到 DOM 元素中(在本例中为 #roll)。如您所说,如果您想将用户带到另一个页面,请使用:

    window.location = 'index2.html';
    

    【讨论】:

    • @Diodeus 我忘了location 是一个属性,而不是一个方法——我脑子里有太多的jQuery。固定。
    • @Blazemonger:这可能是投反对票的原因。因为您已将位置用作函数。 :) 虽然不是我。 ;) 我正忙着输入自己的答案。 :)
    【解决方案4】:

    用户被带到另一个页面

    为了执行该任务,您应该使用:

    location.href = "index2.html"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多