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
Immédiatement, le flux de mise en œuvre de la fonction de déroulement est le suivant.
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
Recommended Posts