Показать сообщение отдельно
  #1 (permalink)  
Старый 10.02.2020, 07:11
Аспирант
Отправить личное сообщение для oleg901 Посмотреть профиль Найти все сообщения от oleg901
 
Регистрация: 12.08.2018
Сообщений: 54

Проводник на фронте
Доброго времени суток, пилил простенький проводничок файлов на фронте и зашел в тупик я не могу продумать гибкий алгоритм хождения папок
Смысл в том что есть два класса:
"element" - типа обычного файла;
"Folder" - папка, внутри класса массив с такими же element и Folder(тип файлы и папки);
и
объект "failing" - в нем есть массив который который хранит все! И метод "render" он отрисовывает все на экран.
Кстати класс "Folder" тоже содержит идентичный метод.
У меня получилось добиться того, что я на пример нажимаю на папку и у меня отрисовывает содержимое папки нажимаю многоточие (тип назад) у меня выводится первый уровень. Но мне нужно, что бы все папки внутри папок сколько бы я не создал открывались и при нажатии многоточия поднимался на уровень выше пока не вернется на главную самый верхний уровень.
Вот код:
<!DOCTYPE html> 

<html>
<head>
<meta charset="utf-8" />
 <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

	



	<script type="text/javascript">
		
		let b = document.getElementsByTagName('body')[0];

	class element {
	    constructor(name) {
	        
	        this.name = name;
	        this.size = "Не реализовано!";
	        this.data = "Не реализовано!";
	        this.type = "file";
	    
	    }
	}
	class Folder extends element {
	   
	    constructor(name, size, data) {
	        
	        super(name, size, data);
	        this.name = name;
	        this.size = size;
	        this.data = data;
	        this.mass = [beack];
	        this.type = "folder";
	    
	    }
	    
	    render() {
	        
	        b.innerHTML = "";
	        
	        for (let i = 0; i < this.mass.length; i++) {
	            let div = document.createElement('div');
	            b.appendChild(div);
	           
	            if (this.mass[i].type === "folder") {
	                div.innerHTML = `<p class="folder" id ="${i}">${this.mass[i].name}</p>`;
	            } 
	            else {
	                
	                if (i === 0) {
	                    div.innerHTML = `<p class="beack" id ="${i}"> ${this.mass[i].name}</p>`;
	                } 
	                else {
	                    div.innerHTML = `<p class="file" id ="${i}"> ${this.mass[i].name}</p>`;
	                
	                }
	            }
	        }
	    }
	}
	
	let beack = {
	    name: "..."
	}
	
	let failing = {
	   
	    mass: [],
	    render() {
	        b.innerHTML = "";
	        
	        for (let i = 0; i < this.mass.length; i++) {
	            let div = document.createElement('div');
	            b.appendChild(div);
	            if (this.mass[i].type === "folder") {
	                div.innerHTML = `<p class="folder" id ="${i}">${this.mass[i].name}</p>`;
	            } 
	            else {
	                
	                div.innerHTML = `<p class="file" id ="${i}"> ${this.mass[i].name}</p>`;
	            }
	        }
	    }
	}
	
	let index = new element("index.html"),
	    style = new element("style.css"),
	    direct = new Folder("direct"),
	    direct1 = new Folder("direct1"),
	    file1 = new element("file.css"),
	    file2 = new element("file1.css");
			
			direct1.mass.push(file1);
			direct.mass.push(direct1);
			failing.mass.push(index);
			failing.mass.push(style);
			failing.mass.push(direct);
			failing.render()
			
			console.log(failing);
	
	
	document.addEventListener("click", function(e) {
	    //console.log(e.target);
	    if (e.target.className === "folder") {
	        failing.mass[+e.target.attributes.id.value].render();
	    }
	    if (e.target.className === "beack") {
	        failing.render();
	    }
	})


За ранее спасибо за помощь. Этот форум меня не раз выручал и много чему научил похоже мне нужен еще один урок

Последний раз редактировалось oleg901, 10.02.2020 в 15:06.
Ответить с цитированием