[JAVA] Mise en œuvre de la fonction déroulante de catégorie

Dans l'affectation finale d'une certaine école de programmation, j'ai implémenté une fonction déroulante de catégorie (une fonction qui affiche la catégorie en tirant vers le bas lorsque vous touchez le mot catégorie dans l'en-tête de la page supérieure), donc je l'ai également expliqué pour ma propre sortie. je pense スクリーンショット 2020-06-10 10.55.11.png

Immédiatement, le flux de mise en œuvre de la fonction de déroulement est le suivant.

① Appuyez sur les lettres de la catégorie

② Un événement se produit dans jQuery et le lien attaché à la catégorie est lu.

③ Effectuez une communication Ajax avec ce lien, obtenez d'abord la catégorie parent de la base de données et retournez la valeur au format json.

④ Après cela, rassemblez simplement les données acquises sous forme HTML et ajoutez-les sous les caractères de la catégorie.

⑤ Les éléments enfants sont également affichés dans le même flux que ci-dessus et ne sont pas affichés lorsque vous accédez aux éléments petits-enfants.

Le code source qui a réalisé cela est le suivant. (Seule la partie pertinente est extraite)

   .contents__bottom
      .header-bottom-left
        .header-bottom-left-category
          = link_to "Catégorie", api_category_path(0) ,class: "category_name", id: "catroy_top_title"
          .header-bottom-left-category-field    


$(function(){
  
  //Générer du HTML déroulant
  function buildHTML(data){

    var html = $("<div>").addClass("header-bottom-left-category-field-nav")
    var link

    data.forEach(function(value){
      link = $("<a>", {
        href: "/api/categories/" + value.id ,
        "class":"category_name"
      }).text(value.name)
      link = $("<p>").append(link)

      html.append(link)
    })

    return html
  }

  //Si vous touchez le titre de la catégorie, il sera à nouveau affiché à partir de zéro
  $("#catroy_top_title").mouseenter(function(){
    $(".header-bottom-left-category-field-nav").remove()
  })

   //Activé lorsque la souris est relâchée
   $(".header-bottom-left-category").mouseleave(function(){
    $(".header-bottom-left-category-field-nav").remove()
  })

  $(document).on({

    //Démarre lorsque le curseur est activé
    'mouseenter' : function() {

      //Obtenez le chemin de la catégorie
      var path = $(this).attr("href");

      //Récupère les éléments enfants de la catégorie touchée
      $.ajax({
        url: path,
        type: "GET",
        dataType: "json",
        context:this,
        cache: false,
      })
      .done(function(result){
  
        //Ne pas afficher les choix s'il n'y a pas d'éléments enfants
        if( result.length != 0 ){
  
          //Ajouter un nouveau formulaire sous le formulaire sélectionné
          var html = buildHTML(result)

          //Supprimer toute liste ajoutée précédemment
          $(this).parent().parent().nextAll(".header-bottom-left-category-field-nav").remove()
          $(".header-bottom-left-category-field").append(html)

        } 

      })

      //Activé lorsque la souris est relâchée
      $(".header-bottom-left-category-field-nav").mouseenter(function(eo){ 
        $(this).find("a").css("color","")
      })

    },'mouseleave' : function(){

       //Activé lorsque la souris est relâchée
      $(".header-bottom-left-category-field-nav").mouseleave(function(eo){
        $(eo.fromElement).css("color","orange")
      })
     
    }
  }, ".category_name") 

})

namespace :api do
  resources :categories, only: [:show]
end

class Api::CategoriesController < ApplicationController
 
  def show

    if params[:id] == "0"
      @categories = Category.where(ancestry:nil)
    else
      @categories = Category.find(params[:id]).children
    end

    respond_to do |format|
      format.html{
        if params[:id] == "0"
          redirect_to category_all_items_path
        else
          redirect_to category_all_items_path(category_id: params[:id])
        end
      }
      format.json{
        render json: @categories
      }
    end 

  end

end

(*) Veuillez l'utiliser après l'avoir adapté à votre environnement.

Recommended Posts

Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction de catégorie
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
Implémentation de la fonction de recherche séquentielle
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
Implémentation d'une fonction similaire en Java
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
Implémentation de la fonction DM
[Rails] Fonction de catégorie
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
Mise en place de la fonction de recherche Mémo d'apprentissage (création de portfolio)
Implémentation de la fonction de suppression (si vous avez une clé étrangère)
Implémentation de la fonction de commentaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
Implémentation appliquée de l'espace de chat
Fonction de recherche [implémentation copier-coller]
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Ajout de la fonction de connexion invité
À propos de l'implémentation du traitement de fusion, y compris la fonction de tri de l'API Stream
Implémentation de la suppression d'ajax dans Rails
Implémentation de la fonction de recherche floue Rails
Implémentation de XLPagerTabStrip avec TabBarController
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
Implémenter la fonction de catégorie en utilisant l'ancêtre