Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Много блоков (https://javascript.ru/forum/misc/80512-mnogo-blokov.html)

laimas 19.06.2020 15:52

Цитата:

Сообщение от Сергей Ракипов
показывался блок kartinkaPriNavedenii

Какой именно или все? Ну поступать также как и в ранее показанном коде.

PS. Если это решаемо средствами CSS, то используйте его, не нужно грузить JS этим.

Сергей Ракипов 19.06.2020 16:15

Цитата:

Сообщение от laimas (Сообщение 526131)
Какой именно или все? Ну поступать также как и в ранее показанном коде.

Я пробую но не получается, какие то ошибки

<div class="shriht">
			<a href="12_pt_serif_open_sans/" target="_blank" class="navedenie">PT Serif & Open Sans</a>
			<div class="kartinka_pri_navedenii">
				<img src="kartinka/12.png" alt="">
			</div>
		</div>

		<div class="shriht">
			<a href="13_pt_sans_pt_serif/" target="_blank" class="navedenie">PT sans & PT serif</a>
			<div class="kartinka_pri_navedenii">
				<img src="kartinka/13.png" alt="">
			</div>
		</div>

laimas 19.06.2020 16:37

let navedenie = document.querySelectorAll(".navedenie"); - это коллекция элементов, let kartinkaPriNavedenii = document.querySelectorAll(".kartinka_pri_navedenii "); - это тоже коллекция элементов. При этом, как выясняется, каждый элемент коллекции kartinkaPriNavedenii является дочерним элементом соответствующего элемента коллекции navedenie. Как понять чего вам хочется, если это две коллекции? Если управлять только своим дочерним элементом, то зачем вы получаете коллекцию kartinkaPriNavedenii?

Кстати, kartinkaPriNavedenii - это может и говорит вам о чем-то, но все-таки, такие ребусы читать не из приятного.

И зачем так, ради "потренироваться" или же так и будет работать. Если последнее, то решать это посредством JS крайне плохая практика.

Сергей Ракипов 19.06.2020 16:58

laimas,
Я пока учусь в свободное время, честно не очень получается.

Сергей Ракипов 19.06.2020 17:03

Я сделал себе вот такую подсказку

https://rakipov.ru/shrift/


И мне нужно что бы это работало вот так, но для всех блоков, а не для одного.

const navedenie = document.querySelectorAll(".navedenie");
const kartinkaPriNavedenii = document.querySelector(".kartinka_pri_navedenii");

function priNavedenii_1() {
    let navedenie = document.querySelectorAll(".navedenie");
    let test = navedenie.getBoundingClientRect();

    console.log(test.top);

    function priNavedenii_2() {

        if (test.top >= 387) {
            kartinkaPriNavedenii.style.visibility = "visible";
            kartinkaPriNavedenii.style.top = "-387" + "px";
        } else if (test.top >= 0) {
            kartinkaPriNavedenii.style.visibility = "visible";
            kartinkaPriNavedenii.style.top = "0" + "px";
        }
    }
    navedenie.addEventListener("mouseover", priNavedenii_2);
}
window.addEventListener('mousemove', priNavedenii_1);


function priNavedenii_3(){
    kartinkaPriNavedenii.style.visibility = "hidden";

}
navedenie.addEventListener("mouseout", priNavedenii_3);

Сергей Ракипов 20.06.2020 07:20

Цитата:

Сообщение от laimas (Сообщение 526127)
Можете "соединить" два значения в одно, страшного не будет. А вообще, параметр, это формальный параметр, передаваемое снаружи в функцию входное значение. А аргумент, фактическая переменная, значение которой используется как входное при вызове функции. Причем эту трактовку не обязательно вы встретите во всех языках.

https://developer.mozilla.org/ru/doc...uide/Functions

Сегодня прочитал, что к аргументу, нужно относится как переменной, это так или я поплыл не туда.

рони 20.06.2020 08:38

Цитата:

Сообщение от Сергей Ракипов
для всех блоков,

<script>
document.addEventListener( "DOMContentLoaded" , function() {
let div = document.querySelector('.kolonki');
let changeTop = {
handleEvent(event) {
const target = event.target.closest('.shriht');
if (!target) return;
let rect = target.getBoundingClientRect();
let divPicture = target.querySelector('.kartinka_pri_navedenii');
let Height = divPicture.offsetHeight;
let h = rect.top + Height > innerHeight ? innerHeight - (rect.top + Height + 10) : 0;
divPicture.style.setProperty('top', `${h}px`)
}};
div.addEventListener('mouseenter', changeTop, true);
  });
</script>

laimas 20.06.2020 09:15

Цитата:

Сообщение от Сергей Ракипов
к аргументу, нужно относится как переменной

Все проще будет, если от естественного. Функции передаются параметры, которые описаны, причем в языках типизированных указаны и типы параметров, и возвращаемый функцией тип. Например функция:

int function_name(int a, int b) в Си - передаваемые в функцию параметры, это integer и функция возвращает integer. В РНР тип возвращаемый функцией описывается в конце после двоеточия, например function_name(array $a) : number. Если передаваемый параметр не будет соответствовать типу, то это вызовет ошибку.

Вызывая функцию вы передаете ей параметры - function_name(23, 99). Функция принимает эти параметры, которые являются ее аргументами:

function_name(a, b) {
    a и b - аргументы функции
}


PS. Строго говоря, аргументы функции нельзя назвать переменными, значение их зависит от переданных в функцию параметров, это да.

Сергей Ракипов 20.06.2020 10:17

рони,
Как всегда спасибо, очень приятно знать что есть такие люди как вы

Сергей Ракипов 20.06.2020 10:19

laimas,
Буду еще разбираться, и я кроме верстки не чего не знаю JS это для меня первый язык


Часовой пояс GMT +3, время: 10:17.