常规JavaScript可以与jQuery混合使用吗?

joh*_*nny 48 javascript jquery

例如,我可以使用此脚本(来自mozilla教程):

<html>
 <head>
  <script type="application/javascript">
    function draw() {
      var canvas = document.getElementById("canvas");
      if (canvas.getContext) {
        var ctx = canvas.getContext("2d");

        ctx.fillStyle = "rgb(200,0,0)";
        ctx.fillRect (10, 10, 55, 50);

        ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
        ctx.fillRect (30, 30, 55, 50);
      }
    }
  </script>
 </head>
 <body onload="draw();">
   <canvas id="canvas" width="150" height="150"></canvas>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

并将此JavaScript与jQuery的document.ready混合而不是依赖于onload?

Nic*_*ver 83

是的,它们都是 JavaScript,您可以使用适合该情况的任何功能.

在这种情况下,您可以将代码放在document.ready处理程序中,如下所示:

$(function() {
  var canvas = document.getElementById("canvas");
  if (canvas.getContext) {
    var ctx = canvas.getContext("2d");

    ctx.fillStyle = "rgb(200,0,0)";
    ctx.fillRect (10, 10, 55, 50);

    ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
    ctx.fillRect (30, 30, 55, 50);
  }
});
Run Code Online (Sandbox Code Playgroud)


tag*_*awa 5

为什么MichalBE会被否决?他是对的-仅使用jQuery(或任何库)在页面加载时触发功能就太过分了,这可能使人们在移动连接上花费金钱并减慢用户体验。如果原始海报不想在body标签中使用onload(而且他很正确地不想这么做),则在draw()函数之后添加以下内容:

if (draw) window.onload = draw;
Run Code Online (Sandbox Code Playgroud)

或者,由西蒙·威利森(Simon Willison)进行,如果您想执行多个功能:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 好的,但是我仍然认为让用户下载整个库只是为了添加加载功能是错误的,无论抽象如何。 (3认同)