javascript - jquery在页面加载后重新启动一个函数

标签 javascript jquery screen-orientation

我有一个来自 Turn4JS 的函数它在网站上生成图书用户界面。问题是 Javascript/JQuery 细节接受以绝对像素为单位的宽度和高度的书籍大小,而不是百分比或任何其他格式。

例子:

$( document ).ready(function() {
    $("#guestbook").turn({
        width: 500, /* pixels */
        height: 360,
        autoCenter: true
    });
});

问题在于该网站是移动设备兼容的(当然),因此对于小型智能手机设备来说,这本书的最大宽度应该是 300 像素,但显然在更大的屏幕上看起来会非常小。

因此,我在 Javascript 上运行媒体查询以根据浏览器大小设置宽度/高度值。我将其设置为在文档就绪以及窗口调整大小和窗口方向更改

时触发的函数

J查询:

function guestbookSize() {
    if ($(window).width() > 1200) {
        $("#guestbookbook").turn({
            width: 700,
            height: 500
        });
    }
    else if ($(window).width() <= 1200 && $(window).width() > 801) {
        $("#guestbookbook").turn({
            width: 500,
            height: 360
        });
    }
    else if ($(window).width() <= 800 && $(window).width() > 360) {
       /* You get the idea */ 
    }
    else if ($(window).width() <= 360) {
        $("#guestbookbook").turn({
            width: 300,
            height: 360
        });
    }
}

$( document ).ready(function() {
    $(document).ready(guestbookSize);
});
$(window).on("orientationchange",guestbookSize);
$(window).resize(guestbookSize);

我很确定我的编码很糟糕,但文档加载调用每次都能正常工作。

窗口调整大小调用不起作用。

所以我的问题是:

如何在不刷新整个页面的情况下重新初始化 guestbookSize 函数中的 .turn 函数的选项?


注意事项:

  • 我正在使用 JQuery 1.11.3
  • 我已阅读 Refire ready event after AJAX reload这看起来很相似但没有运气。
  • 我探索了 Turn4JS official documentation这充其量是零散的。
  • 我确实有两个选择,要么编辑 Turn4JS jquery 文件以接受看起来很糟糕的百分比,要么简单地调整给定的 width/height 取决于客户端屏幕尺寸/方向。

错误:

重新建立 turn 选项时在 firebug 上遇到的错误:

HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy

..xp("<(?:"+ea+")[\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|li...

引用 jquery.1.11.3.min.js 的第 4 行。

最佳答案

我在 document.ready 中添加了事件绑定(bind)并删除了重复项。

似乎可以工作 - 在 Chrome 48、FF 43、IE9 上测试过 - 它们都可以工作(在 Windows 上)

$(document).ready(function() {
  initBook(300, 400);
  $(window).on("orientationchange", guestbookSize);
  $(window).resize(guestbookSize);
});

function initBook(w, h) {
  $("#flipbook").turn({
    width: w,
    height: h
  });
}

function guestbookSize() {
  if ($(window).width() > 1200) {
    initBook(700, 500);
  } else if ($(window).width() <= 1200 && $(window).width() > 801) {
    initBook(500, 360);
  } else if ($(window).width() <= 800 && $(window).width() > 360) {
    initBook(400, 360);
  } else if ($(window).width() <= 360) {
    initBook(300, 360);
  }
}
/* to see book resize */

#flipbook {
  border: 2px solid green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://www.turnjs.com/lib/turn.min.js"></script>

<h2>
Book
</h2>
<div id="flipbook">
  <div class="hard">Turn.js</div>
  <div class="hard"></div>
  <div>Page 1</div>
  <div>Page 2</div>
  <div>Page 3</div>
  <div>Page 4</div>
  <div class="hard"></div>
  <div class="hard"></div>
</div>
<hr/>

关于javascript - jquery在页面加载后重新启动一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35663833/

相关文章:

jquery - 让 jQuery 生成元素 "selected"

javascript - 如何在 UpdatePanel 更新后执行操作?

javascript - 成功调用带参数的简单函数后出现意外警报,消息为 "undefined"

javascript - 如何从 X°Y′Z"格式的点击事件中获取坐标(不是 X.Y == 十进制)

javascript - $(this).hasClass ('has-success' ) 始终返回 false

Android 最佳实践 : How to let an activity start in any orientation but not allow orientation change

javascript - 两个 DIV 的鼠标悬停事件,一个位于另一个之上

jquery - 交换 div 框

android - 我希望我的 android 应用程序仅在纵向模式下运行?

android - 测试 Android 游戏的最佳屏幕分辨率