js scrollIntoView 滑动问题

js scrollIntoView 滑动问题,第1张

最近写了一个效果,点击事件中控制当前页面滚动到指定位置。用到scrollIntoView方法:

查阅了文档 发现scrollIntoView() 方法是让当前的元素滚动到浏览器窗口的可视区域内。之前的设计中,用img 标签绝对定位了背景图,如果样式对html 或者 body 设置了高度,导致内容向上移动,底部超出。

将设置成css方式引入,将父元素相对定位一下

scrollIntoView()方法的参数是一个对象,属性中的block 定义了滑动之后的对其方式,修改成:

参考这位博客的内容:
js判断手指滑动方向(移动端)
var startx, starty;
//获得角度
function getAngle(angx, angy) {
return Mathatan2(angy, angx) 180 / MathPI;
};

//根据起点终点返回方向 1向上 2向下 3向左 4向右 0未滑动
function getDirection(startx, starty, endx, endy) {
var angx = endx - startx;
var angy = endy - starty;
var result = 0;

//如果滑动距离太短
if (Mathabs(angx) < 2 && Mathabs(angy) < 2) {
return result;
}

var angle = getAngle(angx, angy);
if (angle >= -135 && angle <= -45) {
result = 1;
} else if (angle > 45 && angle < 135) {
result = 2;
} else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
result = 3;
} else if (angle >= -45 && angle <= 45) {
result = 4;
}

return result;
}
//手指接触屏幕
documentaddEventListener("touchstart", function(e) {
startx = etouches[0]pageX;
starty = etouches[0]pageY;
}, false);
//手指离开屏幕
documentaddEventListener("touchend", function(e) {
var endx, endy;
endx = echangedTouches[0]pageX;
endy = echangedTouches[0]pageY;
var direction = getDirection(startx, starty, endx, endy);
switch (direction) {
case 0:
alert("未滑动!");
break;
case 1:
alert("向上!")
break;
case 2:
alert("向下!")
break;
case 3:
alert("向左!")
break;
case 4:
alert("向右!")
break;
default:
}
}, false);

试试以下代码:

<!DOCTYPE html>
<html>
<head>
<mata charset="utf-8"/>
<link rel="stylesheet" href=">判断一下浏览器滚动高度和要固定在顶部的那个元素距离文档顶部的距离,然后监听滚动事件,获取滚动的高度,判断滚动高度和获取到的元素距顶部距离,如果相等的时候,让元素固定定位。这样就好了。
写代码太繁琐,原理是这样,你自己试试。
另外,避免出现元素固定定位时,因为突然固定,不占高度导致的页面会跳动一下的问题。可以在固定定位的同时,给后边的元素加上等同于固定定位元素高度的margin-top或者padding-top
另外。再多说一句。个人感觉。网站特效,就是用js控制css,从而得到一些单纯用css写不能实现的效果。所以,遇到类似的效果,可以自己尝试想一下思路,把思路写出来,然后再根据思路,找到自己需要了解的知识点,然后慢慢的效果就出来了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13376590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存