【发布时间】:2018-10-03 16:59:01
【问题描述】:
我无法将此代码转换为可在 iOS 11、Safari、Chrome 和 FF 上以相同行为运行的 vanilla js。我遇到的主要问题是得到 offsetUnit,它帮助我滚动到该部分的中心,以便文本显示在窗口中间。
$(document).on('click', 'a[href^="#"]', function (e) {
e.preventDefault();
var offsetUnit = $(window).height() * 0.5;
$('html, body').scrollTop($($.attr(this, 'href')).offset().top+offsetUnit);
});
* {
margin: 0;
padding: 0;
}
section {
height: 200vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
section > div {
height: 100vh;
width: 100%;
flex: 1;
background-color: pink;
display: flex;
align-items: center;
justify-content: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
<ul>
<li>
<a href="#about">About</a>
</li>
<li>
<a href="#treatments">Treatments</a>
</li>
<li>
<a href="#prices">Prices</a>
</li>
<li>
<a href="#contact">Contact</a>
</li>
</ul>
</nav>
<section id="about"><div>About</div></section>
<section id="treatments"><div>Treatments</div></section>
<section id="prices"><div>Prices</div></section>
<section id="contact"><div>Contact</div></section>
function scrollPlease(element) {
const offsetUnit = (window.innerHeight + "px") * 0.5;
window.scrollTo({
'top': element.offsetTop + offsetUnit
});
}
const link = document.querySelectorAll("[href='href_value']");
const section = document.querySelectorAll("section");
link.addEventListener('click', () => {
scrollPlease(section);
});
https://codepen.io/2ne/pen/JmXPLB?editors=1010 - 链接到 codepen
【问题讨论】:
-
offsetUnit有什么问题?您是否获得了与预期不同的价值?还是未定义?您尝试过的 vanillajs 代码是什么?
-
向我们展示您的尝试。没有它,您的问题就是一项任务,是对编码服务的请求,这使得它在本网站上非常离题。
-
该问题没有回答如何获得视口高度的 50%,即在 css 中相当于 50vh 单位。它也不处理 iOS 11 如何处理视口的高度。不重复。
-
对不起,我应该发布我的尝试,但我不想通过遵循我失败的方法来引导答案。我会尽快发布我的尝试。谢谢
-
没关系。这个想法是允许你在这里提问,而不是让你的老板或客户这样做,这会不利于你的兴趣。另一个标准是您的问题应该足够笼统,以便其他人可以从其答案中受益。一次帮助一个用户比一次帮助 10、100 甚至 1k 更没有意义。
标签: javascript jquery html