如何在 Nuxt 中拥有像 turn.js 这样的翻书?

Posted

技术标签:

【中文标题】如何在 Nuxt 中拥有像 turn.js 这样的翻书?【英文标题】:How to have a flipbook like turn.js in Nuxt? 【发布时间】:2021-12-20 15:34:39 【问题描述】:

如何将 turn.js 导入 nuxt.js 项目。当我通过插件使用时,错误窗口未定义,即使我在客户端模式下使用它

更新:我使用必需的包检查是客户端,但我得到错误 jquery__WEBPACK_IMPORTED_MODULE_3___default(...)(...).turn is not a function
<template>
    <div id="flipbook">
        <div class="hard">
            Turn.js
        </div>
        <div class="hard" />
        <div> Page 1 </div>
        <div> Page 2 </div>
        <div> Page 3 </div>
        <div> Page 4 </div>
        <div class="hard" />
        <div class="hard" />
    </div>
</template>

<script>
    import $ from 'jquery';

    if (process.client) 
        require('turn.js');
    

    export default 
        mounted() 
            console.log($('#flipbook').turn('page'));
            $('#flipbook'.turn(
                width: 400,
                height: 300,
                autoCenter: true,
            ));
        ,

    ;
</script>

【问题讨论】:

嗨,到目前为止,您尝试了什么?你能分享一些代码吗? How to Ask 为什么 jQuery 进入 Nuxt ? Nuxt 就是 Vue.js,难道 Vue.js 不能满足 jQuery 可以解决的需求吗? @BillalBegueradj 确实如此。它可能只是某些插件所需要的,例如 turn.js 【参考方案1】:

EDIT + TLDR:使用flipbook-vue,因为它确实在任何方面都更好(重量、维护、灵活性、不依赖 jQuery 等...)。 这与 Nuxt 作为shown here 一起工作也非常好。


如果你需要将 jQuery 安装到你的 Nuxt 项目中(我这样做不推荐),你可以关注my answer here。尽管如此,IMO 将非常感谢没有 jQuery 的替代方案,如果您仅将其用于选择 DOM 中的元素,则更是如此。值 20kb 吗?

如果您想定位组件中可用的特定元素,请使用$refs 语法,如other answer 中所述。而不是通常的 querySelector。

require 是基于节点的,您应该使用import,因为您在使用 Vue 时处于基于现代浏览器的生态系统中。因此,使用 dynamic import 在本地导入您的包仍然是最好的方法。

TLDR:这样的东西通常足以让它工作

<template>
  <div id="flipbook" ref="flipbook">
    <div class="hard">
      Turn.js
    </div>
    <div class="hard" />
    <div> Page 1 </div>
    <div> Page 2 </div>
    <div> Page 3 </div>
    <div> Page 4 </div>
    <div class="hard" />
    <div class="hard" />
  </div>
</template>

<script>
export default 
  async mounted () 
    if (process.client) 
      const turnJs = await import('turn.js')
      this.$refs.flipbook.turnJs.turn(
        width: 400,
        height: 300,
        autoCenter: true,
      )
    
  

</script>

同时,这个项目已经有 10 年没有更新了,所以我想你可以把这个传下去。

用一点 CSS + JS 编写自己的代码也是完全可行的,并且将提供最好的 IMO 结果。

【讨论】:

我有一个问题。什么是``` this.flipbook.turnJs.turn( width: 400, height: 300, autoCenter: true, ) ``` @Stone0409 抱歉,正如您猜到的那样,这里缺少$refs 我试过了,但是有错误(Cannot read properties of undefined (reading 'turn')):(( @Stone0409 是的,我不确定它可能使用的确切语法,因为它不是上面写的维护包。 import 语法可能不受支持。 turnJs 里面有什么东西吗? 哦,是的,turnJs 里面什么都没有 :((((

以上是关于如何在 Nuxt 中拥有像 turn.js 这样的翻书?的主要内容,如果未能解决你的问题,请参考以下文章

如何在实际服务中运行 nuxt.js?

如何使用 Nuxt 访问 asyncData 中的数据

Nuxt.js - 如何在布局内使用布局

如何让 Nuxt 路由器更有活力?

如何在应用程序中拥有像“GPS Connected”这样的内置 GPS 储物柜?

Nuxt - 如何在服务器端渲染后在客户端运行代码?