【问题标题】:Front End jQuery code not executing correctly with Node.js前端 jQuery 代码无法使用 Node.js 正确执行
【发布时间】:2020-02-29 05:21:15
【问题描述】:

我有一个自动图像滚动 div,它由一个由小图像组成的 ul 组成。目标是拥有一个在页面加载后立即开始的简单滚动条。当我在本地浏览器中简单地运行代码(Html、CSS 和带有 jquery 的 js 文件)时,它可以完美运行,但在应用程序运行节点服务器时不会按预期执行。

我试图确保我的 jQuery 被识别,并在操作滚动条的主代码周围包含了一个包装 $(window).on("load") 函数。我研究过的许多类似帖子都有这个问题。我还仔细检查了服务器是否正在加载外部文件,它是。函数内的控制台日志显示在 chrome 控制台中,没有引发错误。还查看 chrome 控制台会显示正在加载到页面中的必要图像和外部脚本。在外部函数中测试更多的日志记录值表明正在访问资源,所以这可能是 jQuery + 节点的同步问题?任何帮助将不胜感激。

jQuery

$(window).on("load", function () {

   $(function () {
       var scroller = $('#scroller div.innerScrollArea');
       var scrollerContent = scroller.children('ul');
       scrollerContent.children().clone().appendTo(scrollerContent);
       var curX = 0;
       scrollerContent.children().each(function () {
           var $this = $(this);
           $this.css('left', curX);
           curX += $this.outerWidth(true);
       });
       var fullW = curX / 2;
       var viewportW = scroller.width();

       var controller = { curSpeed: 0, fullSpeed: 1 };
       var $controller = $(controller);
       var tweenToNewSpeed = function (newSpeed, duration) {
           if (duration === undefined) {
               duration = 600;
               $controller.stop().animate({ curSpeed: newSpeed }, duration);
           }

       };
       var doScroll = function () {
           var curX = scroller.scrollLeft();
           var newX = curX + controller.curSpeed;
           if (newX > fullW * 2 - viewportW)
               newX -= fullW;
           scroller.scrollLeft(newX);

       };
       setInterval(doScroll, 20);
       tweenToNewSpeed(controller.fullSpeed);
       console.log("foo")
       console.log(scrollerContent);

   });
});

服务器文件

var express = require("express");
var db = require("./models/company.js");


var app = express();

var PORT = process.env.PORT || 8080;

app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(express.static( __dirname + "/public"));


require("./routes/htmlRoutes.js")(app);
require("./routes/apiRoutes.js")(app);

db.sequelize.sync({ force: false }).then(function() {
  app.listen(PORT, function () {
    console.log("App listening on PORT: " + PORT);
  });
})
module.exports = app;

相关的 CSS

#scroller {
    position: relative;
}
#scroller .innerScrollArea {
    overflow: hidden;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}
#scroller ul {
    padding: 0;
    margin: 0;
    position: relative;
}
#scroller li {
    padding: 0;
    margin: 0;
    list-style-type: none;
    position: absolute;
    margin-left: 1%;
    margin-right: 1%;
}

index.html 中的相关代码

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel="stylesheet" href="assets/css/index.css">


    <title>RepoMan</title>
</head>
...
    <!--AD Space-->
    <div id="scroller" style="width: 1110px; height: 75px; margin: 0 auto;">
        <div class="innerScrollArea">
            <ul>
                <!-- Define photos here -->
                <li><img class="ad-img" src="assets/images/sidebar/sm-allied.gif" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-baja.gif" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-bigtime.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-det.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-dyn.gif" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-ken.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-locating.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-minuteman.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-nams.jpeg" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-rec.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-recmng.gif" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-repfl.png" /></li>
                <li><img class="ad-img" src="assets/images/sidebar/sm-rsig.gif" /></li>
            </ul>
        </div>
    </div>
...


    <script src="https://code.jquery.com/jquery-3.4.1.js"
        integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
        integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
        integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
        crossorigin="anonymous"></script>
    <script src="assets/js/index.js"></script>



</body>

</html>

package.json

{
  "name": "UW2",
  "version": "1.0.0",
  "description": "",
  "main": "index.html",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js",
    "dev": "nodemon server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "jquery": "^3.4.1",
    "mysql2": "^1.7.0",
    "nodemon": "^1.19.4",
    "sequelize": "^5.21.1"
  }
}

【问题讨论】:

  • 能否请您发布您的 index.html、package.json 以及有关您的构建过程的一些信息?我需要更多信息
  • 你不需要$(window).on("load", function () {}); 使用你的匿名函数或使用$(document).ready(function(){ }); 并将你的jQuery代码放在里面。
  • 我添加了 package.json 和 index.html 中的相关 html 代码。本质上,我声明了构成进入滚动 div 的 ul 的图像,然后克隆并附加它们以简单地延长 jquery 代码中的持续时间。 @Imran Khan 我同时使用了 (window).on 和 (document).ready 并且在节点运行时都没有按预期运行。两者都致力于本地测试。我的印象是 (window).on("load" 会更明确地等待 DOM 加载。
  • 我认为问题出在app.use(express.json());这行注释掉,然后重试。
  • @Imran Khan 不幸地注释掉该行并没有影响任何东西,无论是在本地还是在节点服务器中

标签: jquery html css node.js express


【解决方案1】:

您是否包括在内 &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt; 在你的index.html 中?

【讨论】:

  • 是的,尽管我使用的是完整的非缩小版。我不知道 npm 是否有不同的版本,但链接的脚本和 jquery 包都是 ^3.4.1。我还尝试了不同的 js 链接在 html 中调用的顺序,但没有结果。
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多