SmoothState.Js页面更改后重新初始化页面脚本

我正在使用SmoothState.js进行页面转换,它可以正常工作并使用ajax加载新页面。但是,我在每个页面上都有JS脚本需要重新初始化,而且我无法使它们始终出现在页面转换中。

smoothState.js提供了onAfter回调函数,该函数可让您重新运行插件。如果您不熟悉AJAX的工作原理,这可能会很棘手。

当您在$(document).ready()上运行插件时,它将仅在页面上当前的元素上注册。由于我们在每次加载时都注入新元素,因此我们需要再次运行插件,将其作用域仅限于新事物。

做到这一点的一种好方法是将您的插件初始化包装在我们同时调用$

.fn.ready()和onAfter的函数中。每次初始化插件时,您都需要指定上下文,以免对它们进行双重绑定。这称为“模块执行控制器”。

我的计划是从JS文件中获取函数,并将它们全部放入SmoothState.js文件内的onAfter调用中。这样,每次用户更改页面时,功能将始终可用。

这里是我现在的代码结构。我已经做了很多挖掘工作,但是我陷入了困境。您能帮我弄清楚我做错了什么吗?谢谢你的时间!

$(document).ready(function() {

mail();

});

$('#main').smoothState({

onAfter: function() {

mail();

}

});

function mail() {

// script from mail.js goes here

}

$(function() {

$('#main').smoothState();

});

$(function() {

"use strict";

var options = {

prefetch: true,

pageCacheSize: 3,

onStart: {

duration: 250, // Duration of our animation

render: function($container) {

// Add your CSS animation reversing class

$container.addClass("is-exiting");

// Restart your animation

smoothState.restartCSSAnimations();

}

},

onReady: {

duration: 0,

render: function($container, $newContent) {

// Remove your CSS animation reversing class

$container.removeClass("is-exiting");

// Inject the new content

$container.html($newContent);

}

},

},

smoothState = $("#main").smoothState(options).data("smoothState");

});

回答:

通过将onAfter脚本移至主要的smoothstate函数(删除了其他smoothstate函数),我设法在代码的末尾运行了一个单独的函数。在刷新浏览器的情况下,也可以在准备好的文档上运行函数。如果它与您的代码相同,则如下所示:

$(document).ready(function() {

mail();

});

function mail() {

// script from mail.js goes here

}

$(function() {

"use strict";

var options = {

prefetch: true,

pageCacheSize: 3,

onStart: {

duration: 250, // Duration of our animation

render: function($container) {

// Add your CSS animation reversing class

$container.addClass("is-exiting");

// Restart your animation

smoothState.restartCSSAnimations();

}

},

onReady: {

duration: 0,

render: function($container, $newContent) {

// Remove your CSS animation reversing class

$container.removeClass("is-exiting");

// Inject the new content

$container.html($newContent);

}

},

onAfter: function() {

mail();

}

},

smoothState = $("#main").smoothState(options).data("smoothState");

});

以上是 SmoothState.Js页面更改后重新初始化页面脚本 的全部内容, 来源链接: utcz.com/qa/420074.html

回到顶部