[proofplan]
The definition of the critical point immediately gives fixedness of all ordinals below $\kappa$ and non-fixedness of $\kappa$. We then use elementarity to see that $j$ preserves the ordinal order, which rules out $j(\kappa)<\kappa$ and hence forces $j(\kappa)>\kappa$. Finally, we prove by transfinite induction on $\alpha<\kappa$ that every member of $V_\alpha$ is fixed; the induction step uses fixedness of the previous rank and the elementary preservation of membership.
[/proofplan]
[step:Fix every ordinal below the critical point]
By definition, $\kappa=\operatorname{crit}(j)$ is the least ordinal moved by $j$. Therefore, for every ordinal $\alpha<\kappa$, one has $j(\alpha)=\alpha$. The same definition also gives $j(\kappa)\neq \kappa$.
[/step]
[step:Show that the critical point moves upward]
Since $j$ is elementary, it preserves the formula defining the ordinal order. Thus, whenever $\alpha$ and $\beta$ are ordinals with $\alpha<\beta$, we have $j(\alpha)<j(\beta)$.
Apply this with each ordinal $\alpha<\kappa$. From the previous step, $j(\alpha)=\alpha$, so
\begin{align*}
\alpha=j(\alpha)<j(\kappa).
\end{align*}
Hence every ordinal $\alpha<\kappa$ belongs to $j(\kappa)$, so $\kappa\leq j(\kappa)$. Since $j(\kappa)\neq\kappa$, it follows that $j(\kappa)>\kappa$.
[guided]
We already know that $\kappa$ is moved by $j$, so the only remaining issue is the direction in which it moves. Because $j$ is elementary, it preserves the first-order relation $<$ on ordinals: if $\alpha<\beta$, then $j(\alpha)<j(\beta)$.
Now fix an arbitrary ordinal $\alpha<\kappa$. By the defining property of the critical point, $j(\alpha)=\alpha$. Applying order preservation to $\alpha<\kappa$ gives
\begin{align*}
j(\alpha)<j(\kappa).
\end{align*}
Substituting $j(\alpha)=\alpha$ yields
\begin{align*}
\alpha<j(\kappa).
\end{align*}
Because this holds for every ordinal $\alpha<\kappa$, the ordinal $j(\kappa)$ contains all ordinals below $\kappa$. Therefore $\kappa\leq j(\kappa)$. The definition of critical point gives $j(\kappa)\neq\kappa$, so the only possibility is
\begin{align*}
j(\kappa)>\kappa.
\end{align*}
[/guided]
[/step]
[step:Induct on the cumulative hierarchy below $\kappa$]
We use the cumulative hierarchy $(V_\gamma)_{\gamma\in\operatorname{Ord}}$, where $V_\gamma$ is the collection of all sets of rank strictly below the ordinal $\gamma$. We prove by transfinite induction on ordinals $\alpha<\kappa$ that
\begin{align*}
\forall x\in V_\alpha,\quad j(x)=x.
\end{align*}
Fix an ordinal $\alpha<\kappa$ and assume inductively that every set in $V_\beta$ is fixed by $j$ for every ordinal $\beta<\alpha$. Let $x$ be a set with $x\in V_\alpha$. If $y$ is a set with $y\in x$, then the rank of $y$ is some ordinal below $\alpha$; equivalently, there exists an ordinal $\beta<\alpha$ such that $y\in V_\beta$. The induction hypothesis therefore gives $j(y)=y$ for every set $y\in x$.
Elementarity gives preservation of membership from $x$ to $j(x)$: for every $y\in x$, we have $j(y)\in j(x)$. Since $j(y)=y$, this gives $x\subseteq j(x)$.
Conversely, since $x\in V_\alpha$, we have $x\subset V_\alpha$. The ordinal $\alpha$ is fixed by $j$. The cumulative hierarchy is first-order definable by recursion on ordinals, so elementarity carries the assertion that $V_\alpha$ is the $\alpha$th level of the cumulative hierarchy to the assertion that $j(V_\alpha)$ is the $j(\alpha)$th level. Hence $j(V_\alpha)=V_{j(\alpha)}=V_\alpha$, and therefore $j(x)\subset V_\alpha$. Let $z$ be a set with $z\in j(x)$. Then $z\in V_\alpha$, so there exists an ordinal $\beta<\alpha$ such that $z\in V_\beta$. By the induction hypothesis, $j(z)=z$. If $z\notin x$, then elementarity applied to the formula $z\notin x$ gives $j(z)\notin j(x)$, hence $z\notin j(x)$, a contradiction. Therefore $z\in x$, and so $j(x)\subseteq x$.
By extensionality, $j(x)=x$. This completes the induction, and therefore every $x\in V_\kappa$ is fixed by $j$.
[/step]