jQuery na JavaScript

jQuery na JavaScript
let_Majka
  • Rejestracja:około 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:13
0

Probuje przerobic ten jQuery kod do edytowania pliku *.pdf na JavaScript, ale mam problem z .outerHeight() . Wiem, wiem powinnam zastapic go z offsetHeight, ale moj Typescripf wyrzuca mi bledy.

Typescript

Kopiuj
	windowResizeHandler: () => void = () => {
		let body = document.querySelector("body");
		let height = parseInt(window.getComputedStyle(body).height);
		//suppose there is a #header element which takes some area.

		let headHeight = $("#header").outerHeight();
		let rightHeight = height;
		if ($("#header").is(":visible")) {
			rightHeight = height - headHeight;
		}
		$("#right").height(rightHeight);
		WebPDF.updateLayer();

HTML

Kopiuj
	<page-container>
		<div id="docViewer" ref="docViewer" style="background: #dddedf;"></div>
	</page-container>

Oczywiscie przypisalam najpierw $("#header"). do zmiennej, ale Typescript nadal wyrzuca mi blad. oto moj kod:

Kopiuj
		let right = document.querySelector("#right");
		let headHeight = document.querySelector("#header");
		let hdHeight = headHeight.offsetHeight;
		let rightHeight = height;

		if(headHeight.className == ":visible") {
			rightHeight = height - hdHeight;
		}
			right.height = rightHeight;
			WebPDF.updateLayer();
		}
edytowany 2x, ostatnio: let_Majka
Kondziowsky
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:219
0

Jeśli chcesz pobrać offsetHeight headera musisz najpierw mieć header w zmiennej.
Czyli tak jak z body - let headerHeight = document.querySelector("header").offsetHeight

let_Majka
tak zrobilam, dodalam do postu kod ktory zmienilam. Typescript nadal wyrzuca bledy
Kondziowsky
pokaż jakie błędy
let_Majka
headHeight ("Cannot redeclare block-scoped variable, let headHight: Element") ,oddsetHeight ("Property "offsetHeight" does not exist on type "number") .className ("Property "classNamet" does not exist on type "number") .height ("Property "height" does not exist on type "Element")
Riddle
@let_Majka: Odpowiadaj w odpowiedziach, proszę.
Kondziowsky
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:219
0

Typescript mocno pilnuje typów. Spróbuj w ten sposób pobrać height:

Kopiuj
let headHeight = document.querySelector< HTMLElement>("#header");
let hdHeight = headHeight.offsetHeight;

edit:
Ogólnie jak zaczynasz zabawę z typescript, to warto przy zmiennych deklarować ich typ, będzie Ci łatwiej.
Np:

Kopiuj
let headHeight: HTMLElement = document.querySelector< HTMLElement>("#header");
let hdHeight: number = headHeight.offsetHeight;

Wtedy wiesz jaka zmienna za co odpowiada i prędzej unikniesz takich błędów

edytowany 2x, ostatnio: Kondziowsky
let_Majka
SUPER udalo sie z takiem rozwiazaniem, ale kiedy zrobilam to samo z "#right" , dalej ma blad("Property "height" does not exist on type "Element") let right = document.querySelector< HTMLElement>("#right"); right.height = rightHeight;
Kondziowsky
Błąd jest stąd, że HTML element nie ma właściwości height. Znowu offsetHeight jest read only i jej nie zmienisz. Możesz zrobić tak: right.style.height = rightHeight
let_Majka
Dobrze kombinujemy, ale TypeScript jest zawziety! right.style.height (Type "number is not assignable to type "string". (property) CSSStyleDeclaration.height: string)
let_Majka
Cannot redeclare block-scoped variable "height"
Riddle
@let_Majka: Pamiętaj, żeby odpowieadać w odpowiedziach, a nie komentarzach.
M3
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:195
1

To coś:

Kopiuj
headHeight.className == ":visible"

Nie ma raczej prawa działać, no chyba że, rzeczywiście element "#header" ma klasę :visible, ale to jest niezgodne ze specyfikacją (klasa nie może zaczynać się od :).

W praktyce raczej (patrząc na twoje jQuery) chcesz sprawdzić, czy ten element ma display: none, możesz to zrobić tak headHeight.offsetParent === null, o ile headHeight nie jest fixed.

Ogólnie cały kod powinien raczej wyglądać jakoś tak:

Kopiuj
windowResizeHandler: () => {
    const bodyHeight = document.body.scrollHeight;
    const header = document.getElementById('header');
    const headerHeight = header.getBoundingClientRect().height;

     let rightHeight = headerHeight;
     if (header.offsetParent === null) {
        rightHeight = bodyHeight - headerHeight;
     }
     document.getElementById('right').style.height = `${rightHeight}px`;
     WebPDF.updateLayer();
}

A do czego ta dziwna konstrukcja?

Kopiuj
() => void = () =>
let_Majka
tak dziala, dziekuje serdecznie!
let_Majka
  • Rejestracja:około 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:13
0

Udal sie z podpowiedzia @TomRiddle! @Kondziowsky dziekuje serdecznie za czas i chec pomocy. Jestem wdzieczna za pomoc. Pozdrawiam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.