【问题标题】:Load page Ajax and then slide it into page OR plugin加载页面 Ajax,然后将其滑入页面或插件
【发布时间】:2014-10-25 14:00:37
【问题描述】:


我的网站结构或多或少是这样的: 主页 - 第 1 页 - 第 2 页 - 第 3 页。
我会意识到一个网站在页面之间具有类似“移动应用程序”的过渡,您单击一个按钮然后新页面滑入。
现在我正在研究如何实现这一点,如果使用 AJAX(即加载页面并滑动它,但我不知道 AJAX)或使用插件(但我找不到任何东西)。
另一种选择是创建一个页面,然后进入该页面(最好找到一个插件来做到这一点)但是页面很大,所以我的网站会变得很重。
有谁知道如何帮助我? 谢谢大家!

ps:该网站仅针对平板电脑和智能手机开发

【问题讨论】:

  • 有很多关于单页应用的教程.. 让谷歌成为你的朋友
  • @charlietfl 我搜索了很多,但我没有找到一个好的,你有一个好的链接吗?
  • @robert,给我几分钟我给你写一个很好的例子

标签: javascript jquery html ajax slider


【解决方案1】:

有很多方法可以实现您想要的,下面我将向您展示其中一种。 (答案底部的示例)

您将内容隐藏在屏幕之外,并在页面加载时滑动:

HTML:

<div class="content_div">
    <p class="title">HOME</p>
    <a href="" class="nav">page 1</a>
</div>

CSS:

body{
    overflow:hidden;
}
.content_div {
    box-shadow:0 0 10px;
    border:10px solid black;
    height:800px;
    left:-1000px;
    width:100%;
    -webkit-animation:slide_in 800ms ease-out forwards;
    position:absolute;
    box-sizing:border-box;
}
.title{
    font-size:50px;
    text-align:center;
}
.nav{
    margin-left:20px;
}
@-webkit-keyframes slide_in{
    0% {
        left:-1000px;
    }
    100% {
        left:0px;
    }
}

现在,当您单击链接时,您会使用自定义处理程序拦截单击,防止默认重定向,执行“滑出”动画,一旦动画完成,您将手动重定向:

.promise().done() 中的函数将在对象上的所有动画完成后立即执行:

$(function(){
    $(".nav").on("click",function(ev){
        ev.preventDefault();        
        $(".content_div").animate({
            "margin-left":$(".content_div").width() +100
        }).promise().done(function(){
            window.location="http://jsfiddle.net/TheBanana/27o989vy/embedded/result/";
        });
    });
});

这是一个Live Example

在您网站的每个页面上实现这一点,您应该有滑动过渡。 如果您想要不同的动画,请更改过渡。

注意: 在 jsfiddle 中它会有点混乱,因为它会在内部自行打开,但在您的网站上它会根据需要运行。

AJAX 更新:

如果您想避免在窗口重新定位到新页面时页面消失,您需要从新页面动态加载内容,而不是更改位置。

你可以使用普通的 ajax 来做到这一点,或者你可以使用 jQuery 的 ajax 扩展 .load(),它在后台执行相同的 ajax:

$(".nav_waitforajax").on("click", function (ev) {
    ev.preventDefault();
    $(".content_div").animate({
        "margin-left": $(".content_div").width() + 100
    }).promise().done(function () {
        $(".content_div").load("/three", function () {
            $(".content_div").animate({
                "margin-left": 0
            });
        });
    });
});

Ajax Example

更新 2: 动态内容的委托处理程序:

//monitors a `mouseover` event on every element inside `.content_div`
//which fits the selector of "*" (everything)
$(".content_div").on("mouseover","*",function(){
    $(this).css({
        "background":"red"
    });
});

Delegates Example

【讨论】:

  • 感谢您的提示,它可以处理一些事件,例如单击、悬停等,但是有没有办法在 ajax 调用之后运行任何类型的代码?再比如,修改css没有任何事件(不是在悬停,不是在点击,只是修改它)?比如“获取#div1的宽度,设置#div2的宽度=#div1
  • 是的,当然,您可以在 .done() 函数中执行所有操作。加载内容后,您可以像往常一样使用 jQuery 甚至 vanilla javascript 选择其元素。
  • 类似的东西? (我很抱歉有几个问题,但 ajax 对我来说是全新的:O)jsfiddle.net/srm6qxqz
  • 顺便说一句,我真的不明白这些东西.. 试着想想一个页面(example.html)并认为我在上面写了 200 多行代码,如果我会放.done() 中的它们使我的代码一团糟。我认为我应该是一个更聪明的主意,不是吗? ajax调用后刷新js文件之类的。
  • 不用担心 :) 随时问你需要什么。是的,就像你的小提琴一样。但是,无需直接在该函数中编写所有 200 行,您可以在函数中添加一个包含所有需要代码的新 JS 文件,并在 .done() 中简单地从单独的 js 文件中调用该函数。或者,您可以直接在新的 js 文件中编写代码而不使用函数,并在加载完成函数后将其链接到您的项目。有很多关于动态链接资源的例子:)
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2014-09-08
  • 2012-03-19
相关资源
最近更新 更多