検索
ホームページウェブフロントエンドjsチュートリアルJS コンポーネント ブートストラップ テーブル テーブル行ドラッグ効果の実装コード_JavaScript スキル

1. ビジネスニーズと導入結果

このプロジェクトには注文モジュールが含まれており、その日突然、ステータスの異なる 2 つの注文間で注文挿入効果を達成する必要があるという要件を受け取りました。ページ上の表示方法は次のとおりです。左右に 2 つのテーブルがあります。左側のテーブルのステータスは、注文 1 です。右側のテーブルにステータス 2 の注文があります。ドラッグが完了したら、左側のテーブルの行データを右側のテーブルの指定した行位置にドラッグします。 、左側のテーブルは 1 行減少し、右側のテーブルは 1 行増加します。さらに、前のステップに戻るには、操作を元に戻す (Ctrl Z 操作に相当) 必要もあります。この説明を読むと、シミュレーションについて考え直してしまうかもしれません。とにかく、最初にレンダリングを見てみましょう。

1. ドラッグする前にまずエフェクトを確認します

2. これは、左側のテーブル行データをドラッグした結果です

3. 行をドラッグした後のテーブルデータの影響

4. 2 回目と 3 回目のドラッグが完了した後の効果

5. 右側のテーブルで元に戻す操作をクリックした場合の効果

6. [元に戻す] を複数回クリックして、フォームを初期状態に戻します

2. コード例
リクエストを受け取ったときに最初に思ったのは、Bootstrap テーブル API で検索するべきだということでした。結局のところ、オープンソースの力は強力であり、関連する例があるかもしれません。少し調べてみましたが、残念ながら、Bootstrap Table には 2 つのテーブル間でそのような操作はありません。実際に考えてみると、Bootstrap Table は特定の動的テーブルのデータ バインディングを目的として設計されていることがわかります。たとえば、ドラッグ アンド ドロップによる並べ替えのための優れたソリューションがあります。テーブル内の行の Reorder Rows) は、ブロガーのような特別なニーズを自分で実現する必要があるようです。
1. 需要分析
自分で書くことにしたので、要件を分析し始めました。ドラッグ アンド ドロップ効果に関して言えば、JsPlumb を使用する場合に最も難しいことがわかりました。使用量が多すぎるため、魔法の JQuery UI と Droppable.js のドラッグ アンド ドロップ効果を考えました。ドラッグ アンド ドロップの問題は解決しましたが、操作を元に戻した場合はどうすればよいかという問題がまだ残っています。 Ctrl Z が復元を意味することは知っていますが、復元とは何ですか?前のステップの操作に戻るため、前のステップの状態を保存できることが前提となります。あるステップの状態を保存する方法については、グローバル変数を使用する必要があります。 Json が必要です。これはそれぞれ、現在のステップのインデックス、左側のテーブルのデータ、右側のテーブルのデータです。それほど難しくないようなので、始めてみましょう。
2. コード例
2.1 cshtml ページ コード

<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>@ViewBag.Title</title>
 @Styles.Render("~/Content/css")
 @Styles.Render("~/Content/table-css")
 @Scripts.Render("~/bundles/jquery")
 @Scripts.Render("~/bundles/knockout")
 @Scripts.Render("~/bundles/bootstrap")
 @Scripts.Render("~/bundles/bootstrap-table")
 @RenderSection("Scripts", false)
</head>
<body>
 @RenderBody()
</body>
</html>
 
@{
 ViewBag.Title = "订单插单";
 Layout = "~/Views/Shared/_Layout.cshtml";
}

@Scripts.Render("~/bundles/Order/InsertOrder")
@Styles.Render("~/bundles/Order/css")
@Scripts.Render("~/Content/bootstrap/datepicker/js")
@Styles.Render("~/Content/bootstrap/datepicker/css")

<script src="~/Content/jquery-ui-1.11.4.custom/jquery-ui.min.js"></script>

<div class="panel-body" style="padding-bottom:0px;">
 
  <div class="panel panel-default" style="margin-bottom:0px;">
   <div class="panel-heading">查询条件</div>
   <div class="panel-body container-fluid">
    <div class="row">
     <div class="col-md-3">
      <label for="txt_search_ordernumber" class="col-sm-4 control-label" style="margin-top:6px;">订单号</label>
      <span class="col-sm-8">
       <input type="text" class="form-control" id="txt_search_ordernumber">
      </span>
     </div>
     <div class="col-md-3">
      <label for="txt_search_bodynumber" class="col-sm-3 control-label" style="margin-top:6px;">车身号</label>
      <span class="col-sm-8">
       <input type="text" class="form-control" id="txt_search_bodynumber">
      </span>
     </div>
     <div class="col-md-3">
      <label for="txt_search_vinnumber" class="col-sm-4 control-label" style="margin-top:6px;">VIN码</label>
      <span class="col-sm-8">
       <input type="text" class="form-control" id="txt_search_vinnumber">
      </span>
     </div>
     <div class="col-md-3">
      <label for="txt_search_engin_code" class="col-sm-4 control-label" style="margin-top:6px;">发动机号</label>
      <span class="col-sm-8">
       <input type="text" class="form-control" id="txt_search_engin_code">
      </span>
     </div>
    </div>
    <div class="collapse" id="div_more_search">
     <div class="row" style="margin-top:15px;">
      <div class="col-md-3">
       <label for="txt_search_import_startdate" class="col-sm-4 control-label" style="margin-top:6px;">导入时间</label>
       <span class="col-sm-8">
        <input type="text" class="form-control datetimepicker" readonly id="txt_search_import_startdate">
       </span>
      </div>
      <div class="col-md-3">
       <label for="txt_search_import_enddate" class="col-sm-3 control-label" style="margin-top:6px;">至</label>
       <span class="col-sm-8">
        <input type="text" class="form-control datetimepicker" readonly id="txt_search_import_enddate">
       </span>
      </div>
      <div class="col-md-3">
       <label for="txt_search_send_startdate" class="col-sm-4 control-label" style="margin-top:6px;">下发时间</label>
       <span class="col-sm-8">
        <input type="text" class="form-control datetimepicker" readonly id="txt_search_send_startdate">
       </span>
      </div>
      <div class="col-md-3">
       <label for="txt_search_send_enddate" class="col-sm-4 control-label" style="margin-top:6px;">至</label>
       <span class="col-sm-8">
        <input type="text" class="form-control datetimepicker" readonly id="txt_search_send_enddate">
       </span>
      </div>
     </div>

     <div class="row" style="margin-top:15px;">
      <div class="col-md-3">
       <label for="txt_search_carcode" class="col-sm-4 control-label" style="margin-top:6px;">整车编码</label>
       <span class="col-sm-8">
        <input type="text" class="form-control" id="txt_search_carcode">
       </span>
      </div>
      <div class="col-md-3">
       <label for="txt_search_vms" class="col-sm-3 control-label" style="margin-top:6px;">VMS号</label>
       <span class="col-sm-8">
        <input type="text" class="form-control" id="txt_search_vms">
       </span>
      </div>
      <div class="col-md-3">
       <label for="txt_search_trans_code" class="col-sm-4 control-label" style="margin-top:6px;">变速箱号</label>
       <span class="col-sm-8">
        <input type="text" class="form-control" id="txt_search_trans_code">
       </span>
      </div>
     </div>
    </div>

     <div class="row" style="float:right;margin-right:50px;margin-top:13px;">
      <div>
       <button type="button" id="btn_query" class="btn btn-primary" style="margin-right:20px;width:100px;">查询</button>
       <button type="submit" id="btn_reset" class="btn btn-default" style="margin-right:20px;width:100px;">重置</button>
      </div>

     </div>
    </div>
  </div>

 <div class="collapse_div_outside">
  <div class="collapse_div_inside"></div>
  <span id="span_collapse" href="#div_more_search" class="collapse_div_inside_ele">展开<label class="glyphicon glyphicon-menu-down"></label></span>
 </div>
</div>

@*<div id="toolbar_left" class="btn-group">
</div>*@
<div id="toolbar_right" class="btn-group">
 <button id="btn_cancel" type="button" class="btn btn-default">
  <span class="glyphicon glyphicon-backward aria-hidden="true"></span>撤销
 </button>
 <button id="btn_insertorder" type="button" class="btn btn-default">
  <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>插单
 </button>
</div>
<div class="panel-body" style="padding-top:0px;">
 <div id="div_tableleft" class="col-md-6">
  <table id="tb_order_left"></table>
 </div>
 <div id="div_tableright" class="col-md-6">
  <table id="tb_order_right"></table>
 </div>
</div>

2.2 js コード

var i_statuindex = 0;
//此数组用于保存撤销操作每一步的数据
var arrdata = [];

var m_oTable = null;

$(function () {
 //1.初始化表格
 m_oTable = new TableInit();
 m_oTable.Init();

 //2.初始化按钮事件
 var oButtonInit = new ButtonInit();
 oButtonInit.Init();

 //3.日期控件的初始化
 $(".datetimepicker").datetimepicker({
  format: 'yyyy-mm-dd hh:ii',
  autoclose: true,
  todayBtn: true,
 });

});

//表格相关事件和方法
var TableInit = function () {
 var oTableInit = new Object();

 oTableInit.Init = function () {
     //初始化左边表格
  $('#tb_order_left').bootstrapTable({
   url: '/api/OrderApi/get',
   method: 'get',
   striped: true,
   cache: false,
   striped: true,
   pagination: true,
   height: 600,
   uniqueId:"TO_ORDER_ID",
   queryParams: oTableInit.queryParams,
   queryParamsType: "limit",
   sidePagination: "server",
   pageSize: 10,
   pageList: [10, 25, 50, 100],
   search: true,
   strictSearch: true,
   showColumns: true,
   showRefresh: true,
   minimumCountColumns: 2,
   clickToSelect: true,
   columns: [{
    checkbox: true
   },
   {
    field: 'ORDER_NO',
    title: '订单号'
   },
   {
    field: 'BODY_NO',
    title: '车身号'
   }, {
    field: 'VIN',
    title: 'VIN码'
   }, {
    field: 'TM_MODEL_MATERIAL_ID',
    title: '整车编码'
   },
   {
    field: 'ORDER_TYPE',
    title: '订单类型'
   },
   {
    field: 'ORDER_STATUS',
    title: '订单状态'
   },
   {
    field: 'CREATE_DATE',
    title: '订单导入时间'
   },
   {
    field: 'PLAN_DATE',
    title: '订单计划上线日期'
   },
   {
    field: 'VMS_NO',
    title: 'VMS号'
   },
   {
    field: 'ENGIN_CODE',
    title: '发动机号'
   },
   {
    field: 'TRANS_CODE',
    title: '变速箱号'
   },
   {
    field: 'OFFLINE_DATE_ACT',
    title: '实际下线日期'
   },
   {
    field: 'HOLD_RES',
    title: 'hold理由'
   },
   {
    field: 'SPC_FLAG',
    title: '特殊标记'
   },
   ],
   onLoadSuccess: function (data) {
     //表格加载完成之后初始化拖拽
          oTableInit.InitDrag();
   }
  });
     //初始化右边表格
  $('#tb_order_right').bootstrapTable({
   url: '/api/OrderApi/get',
   method: 'get',
   toolbar: '#toolbar_right',
   striped: true,
   cache: false,
   striped: true,
   pagination: true,
   height: 600,
   queryParams: oTableInit.queryParamsRight,
   queryParamsType: "limit",
   //ajaxOptions: { departmentname: "", statu: "" },
   sidePagination: "server",
   pageSize: 10,
   pageList: [10, 25, 50, 100],
   search: true,
   strictSearch: true,
   showRefresh: true,
   minimumCountColumns: 2,
   columns: [
   {
    field: 'ORDER_NO',
    title: '订单号'
   },
   {
    field: 'BODY_NO',
    title: '车身号'
   }, {
    field: 'VIN',
    title: 'VIN码'
   }, {
    field: 'TM_MODEL_MATERIAL_ID',
    title: '整车编码'
   },
   {
    field: 'ORDER_TYPE',
    title: '订单类型'
   },
   {
    field: 'ORDER_STATUS',
    title: '订单状态'
   },
   {
    field: 'CREATE_DATE',
    title: '订单导入时间'
   },
   {
    field: 'PLAN_DATE',
    title: '订单计划上线日期'
   },
   {
    field: 'VMS_NO',
    title: 'VMS号'
   },
   {
    field: 'ENGIN_CODE',
    title: '发动机号'
   },
   {
    field: 'TRANS_CODE',
    title: '变速箱号'
   },
   {
    field: 'OFFLINE_DATE_ACT',
    title: '实际下线日期'
   },
   {
    field: 'HOLD_RES',
    title: 'hold理由'
   },
   {
    field: 'SPC_FLAG',
    title: '特殊标记'
   },
   ],
   onLoadSuccess: function (data) {
    oTableInit.InitDrop();
   }
  });
 };
 //注册表格行的draggable事件
 oTableInit.InitDrag = function () {
  $('#tb_order_left tr').draggable({
   helper: "clone",
   start: function (event, ui) {
    var old_left_data = JSON.stringify($('#tb_order_left').bootstrapTable("getData"));
    var old_right_data = JSON.stringify($('#tb_order_right').bootstrapTable("getData"));
    var odata = { index: ++i_statuindex, left_data: old_left_data, right_data: old_right_data };
    arrdata.push(odata);
   },
   stop: function (event, ui) {
    
   }
  });
 };
 //注册右边表格的droppable事件
 oTableInit.InitDrop = function () {
  $("#tb_order_right").droppable({
   drop: function (event, ui) {
    var arrtd = $(ui.helper[0]).find("td");
    var rowdata = {
     ORDER_NO: $(arrtd[1]).text(),
     BODY_NO: $(arrtd[2]).text(),
     VIN: $(arrtd[3]).text(),
     TM_MODEL_MATERIAL_ID: $(arrtd[4]).text(),
     ORDER_TYPE: $(arrtd[5]).text(),
     ORDER_STATUS: $(arrtd[6]).text(),
     CREATE_DATE: $(arrtd[7]).text() == "-" &#63; null : $(arrtd[7]).text(),
     PLAN_DATE: $(arrtd[8]).text() == "-" &#63; null : $(arrtd[8]).text(),
     VMS_NO: $(arrtd[9]).text(),
     ENGIN_CODE: $(arrtd[10]).text(),
     TRANS_CODE: $(arrtd[11]).text(),
     OFFLINE_DATE_ACT: $(arrtd[12]).text() == "-" &#63; null : $(arrtd[12]).text(),
     HOLD_RES: $(arrtd[13]).text(),
     SPC_FLAG: $(arrtd[14]).text(),
     TO_ORDER_ID: $(ui.helper[0]).attr("data-uniqueid")

    };
    var oTop = ui.helper[0].offsetTop;
    var iRowHeadHeight = 40;
    var iRowHeight = 37;
    var rowIndex = 0;
    if (oTop <= iRowHeadHeight + iRowHeight / 2) {
     rowIndex = 0;
    }
    else {
     rowIndex = Math.ceil((oTop - iRowHeadHeight) / iRowHeight);
    }
          //插入右边表格指定位置行数据
    $("#tb_order_right").bootstrapTable("insertRow", { index: rowIndex, row: rowdata });
    $('#tb_order_left').bootstrapTable("removeByUniqueId", $(ui.helper[0]).attr("data-uniqueid"));
    oTableInit.InitDrag();
   }
  });
 };

 oTableInit.queryParams = function (params) { //配置参数
  var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
   limit: params.limit, //页面大小
   offset: params.offset, //页码
   strBodyno: $("#txt_search_bodynumber").val(),
   strVin: $("#txt_search_vinnumber").val(),
   strOrderno: $("#txt_search_ordernumber").val(),
   strEngincode: $("#txt_search_engin_code").val(),
   strOrderstatus: 0,
   strTranscode: $("#txt_search_trans_code").val(),
   strVms: $("#txt_search_vms").val(),
   strCarcode: $("#txt_search_carcode").val(),
   strImportStartdate: $("#txt_search_import_startdate").val(),
   strImportEnddate: $("#txt_search_import_enddate").val(),
   strSendStartdate: $("#txt_search_send_startdate").val(),
   strSendEnddate: $("#txt_search_send_enddate").val(),

  };
  return temp;
 };

 oTableInit.queryParamsRight = function (params) { //配置参数
  var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
   limit: params.limit, //页面大小
   offset: params.offset, //页码
   strBodyno: "",
   strVin: "",
   strOrderno: "",
   strEngincode: "",
   strOrderstatus: 5,
   strTranscode: "",
   strVms: "",
   strCarcode: "",
   strImportStartdate: "",
   strImportEnddate: "",
   strSendStartdate: "",
   strSendEnddate: "",

  };
  return temp;
 };

 return oTableInit;
};

//页面按钮初始化事件
var ButtonInit = function () {
 var oInit = new Object();
 var postdata = {};

 oInit.Init = function () {

  //查询点击事件
  $("#btn_query").click(function () {
   $("#tb_order_left").bootstrapTable('refresh');
  });

  //重置点击事件
  $("#btn_reset").click(function () {
   $(".container-fluid").find(".form-control").val("");
   $("#tb_order_left").bootstrapTable('refresh');
  });
  //撤销操作点击事件
  $("#btn_cancel").click(function () {
   if (i_statuindex <= 0) {
    return;
   }
   for (var i = 0; i < arrdata.length; i++) {
    if (arrdata[i].index != i_statuindex) {
     continue;
    }
    var arr_left_data = eval(arrdata[i].left_data);
    var arr_right_data = eval(arrdata[i].right_data);

    $('#tb_order_left').bootstrapTable('removeAll');
    $('#tb_order_right').bootstrapTable('removeAll');
    $('#tb_order_left').bootstrapTable('append', arr_left_data);
    for (var x = 0; x < arr_right_data.length; x++) {
     $("#tb_order_right").bootstrapTable("insertRow", { index: x, row: arr_right_data[x] });
    }
    
    //$('#tb_order_right').bootstrapTable('append', arr_right_data);//append之后不能drop
    break;
   }
   i_statuindex--;

   //重新注册可拖拽
   m_oTable.InitDrag();
   //m_oTable.InitDrop();
  });

  //搜索栏展开收起点击事件
  $("#span_collapse").click(function () {
   if ($(this).text() == "收起") {
    $(this).html('展开<label class="glyphicon glyphicon-menu-down"></label>');
    $("#div_more_search").collapse('hide');
   }
   else {
    $(this).html('收起<label class="glyphicon glyphicon-menu-up"></label>');
    $("#div_more_search").collapse('show')
   }
  });
 };

 return oInit;
};

いくつかの場所のコードに注目してみましょう:
2.2.1 左側のテーブルが正常に読み込まれた後、テーブルの行をドラッグ アンド ドロップできます。

$('#tb_order_left tr').draggable({
   helper: "clone",
   start: function (event, ui) {
    var old_left_data = JSON.stringify($('#tb_order_left').bootstrapTable("getData"));
    var old_right_data = JSON.stringify($('#tb_order_right').bootstrapTable("getData"));
    var odata = { index: ++i_statuindex, left_data: old_left_data, right_data: old_right_data };
    arrdata.push(odata);
   },
   stop: function (event, ui) {
   }
  });

draggable の開始イベントでは、arrdata 変数にドラッグする前に、左側と右側のテーブルのすべてのデータを保存します。グローバル変数 i_statuindex は、現在のステップのインデックスを記録するために使用され、操作を元に戻すために使用されます。
2.2.2 右側のテーブルが正常に読み込まれたら、フォームのドロップ可能なイベントを登録します

$("#tb_order_right").droppable({
 drop: function (event, ui) {
 var arrtd = $(ui.helper[0]).find("td");
 var rowdata = {
  ORDER_NO: $(arrtd[1]).text(),
  BODY_NO: $(arrtd[2]).text(),
  VIN: $(arrtd[3]).text(),
  TM_MODEL_MATERIAL_ID: $(arrtd[4]).text(),
  ORDER_TYPE: $(arrtd[5]).text(),
  ORDER_STATUS: $(arrtd[6]).text(),
  CREATE_DATE: $(arrtd[7]).text() == "-" &#63; null : $(arrtd[7]).text(),
  PLAN_DATE: $(arrtd[8]).text() == "-" &#63; null : $(arrtd[8]).text(),
  VMS_NO: $(arrtd[9]).text(),
  ENGIN_CODE: $(arrtd[10]).text(),
  TRANS_CODE: $(arrtd[11]).text(),
  OFFLINE_DATE_ACT: $(arrtd[12]).text() == "-" &#63; null : $(arrtd[12]).text(),
  HOLD_RES: $(arrtd[13]).text(),
  SPC_FLAG: $(arrtd[14]).text(),
  TO_ORDER_ID: $(ui.helper[0]).attr("data-uniqueid")

 };
 var oTop = ui.helper[0].offsetTop;
 var iRowHeadHeight = 40;
 var iRowHeight = 37;
 var rowIndex = 0;
 if (oTop <= iRowHeadHeight + iRowHeight / 2) {
  rowIndex = 0;
 }
 else {
  rowIndex = Math.ceil((oTop - iRowHeadHeight) / iRowHeight);
 }
 $("#tb_order_right").bootstrapTable("insertRow", { index: rowIndex, row: rowdata });
 $('#tb_order_left').bootstrapTable("removeByUniqueId", $(ui.helper[0]).attr("data-uniqueid"));
 oTableInit.InitDrag();
 }
 });

ドロップ イベントでは、現在ドラッグされている行データを取得し、現在のマウス位置を計算して、ドラッグされた行データを右側のテーブルの指定された位置に挿入します。次に、左側のテーブルからドラッグした行データを削除します。
2.2.3 アンドゥ操作コード

//撤销操作点击事件
 $("#btn_cancel").click(function () {
 if (i_statuindex <= 0) {
 return;
 }
 for (var i = 0; i < arrdata.length; i++) {
 if (arrdata[i].index != i_statuindex) {
  continue;
 }
 var arr_left_data = eval(arrdata[i].left_data);
 var arr_right_data = eval(arrdata[i].right_data);

 $('#tb_order_left').bootstrapTable('removeAll');
 $('#tb_order_right').bootstrapTable('removeAll');
 $('#tb_order_left').bootstrapTable('append', arr_left_data);
 for (var x = 0; x < arr_right_data.length; x++) {
  $("#tb_order_right").bootstrapTable("insertRow", { index: x, row: arr_right_data[x] });
 }
 //$('#tb_order_right').bootstrapTable('append', arr_right_data);//append之后不能drop
 break;
 }
 i_statuindex--;

 //重写注册可拖拽
 m_oTable.InitDrag();
 });

撤銷操作主要是透過全域變數arrdata裡面的索引判斷撤銷到哪一步,然後根據索引取出當前步驟的左右表格數據,依次向兩個表格插入數據,然後i_statuindex依次遞減,直至等於零,由於左邊表格行資料全部重寫載入過,所以需要重新註冊可拖曳事件。就是這麼簡單的三步驟就能實現想要的效果,是不是很簡單~~

以上就是本文的全部內容,希望對大家的學習有所幫助。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境