Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带箭头的水平滚动在第二次单击时跳过滚动位置_Javascript_Html_Css_Scroll - Fatal编程技术网

Javascript 带箭头的水平滚动在第二次单击时跳过滚动位置

Javascript 带箭头的水平滚动在第二次单击时跳过滚动位置,javascript,html,css,scroll,Javascript,Html,Css,Scroll,我在一个水平滚动条上工作,左右箭头用于平滑滚动。 我的想法是让getMenuPosition()+“100”向左滚动,它在第一次单击时起作用,但在第二次单击时不起作用。 对于使用getMenuPosition()-“100”进行右滚动,它可以按预期工作。 每次用户单击箭头时,我都需要将左右滚动进度设置为100。 任何帮助都将不胜感激 //滚动动画的持续时间 var=300; //划桨 var leftpable=document.getElementsByClassName('left-pab

我在一个水平滚动条上工作,左右箭头用于平滑滚动。 我的想法是让getMenuPosition()+“100”向左滚动,它在第一次单击时起作用,但在第二次单击时不起作用。 对于使用getMenuPosition()-“100”进行右滚动,它可以按预期工作。 每次用户单击箭头时,我都需要将左右滚动进度设置为100。 任何帮助都将不胜感激

//滚动动画的持续时间
var=300;
//划桨
var leftpable=document.getElementsByClassName('left-pable');
var rightpaible=document.getElementsByClassName('right-palle');
//获取项目维度
var itemsLength=$('.item').length;
var itemSize=$('.item').outerWidth(true);
//为桨叶触发点获取一些相关尺寸
风险价值边际=20;
//获取包装宽度
var getMenuWrapperSize=函数(){
返回$('.menu wrapper').outerWidth();
}
var menuWrapperSize=getMenuWrapperSize();
//包装是有响应的
$(窗口).on('resize',function()){
menuWrapperSize=getMenuWrapperSize();
});
//菜单可见部分的大小与包装大小相等
var menuVisibleSize=menuWrapperSize;
//获取所有菜单项的总宽度
var getMenuSize=function(){
返回itemsLength*itemSize;
};
var menuSize=getMenuSize();
//获取菜单中有多少是不可见的
var menuInvisibleSize=菜单化-菜单化;
//我们向左滚动了多少
var getMenuPosition=函数(){
返回$('.menu').scrollLeft();
};
//最后,当我们实际滚动菜单时会发生什么
$('.menu')。在('scroll',function()上{
//获取菜单中有多少是不可见的
menuInvisibleSize=menuSize-menuWrapperSize;
//到目前为止我们滚动了多少
var menuPosition=getMenuPosition();
var menuEndOffset=menuInvisibleSize-页边距;
//显示并隐藏挡板
//取决于滚动位置
if(menuPosition=menuEndOffset){
$(左桨).removeClass('hidden');
$(rightbail.addClass('hidden');
}
//打印重要值
$('#打印包装大小span').text(menuWrapperSize);
$(“#打印菜单大小范围”).text(菜单化);
$('#打印菜单不可见大小span')。文本(menuInvisibleSize);
$('#打印菜单位置span')。文本(菜单位置);
});
//向左滚动
$(右桨)。在('单击',函数()上){
$('.menu')。设置动画({
scrollLeft:getMenuPosition()+“100”
},持续时间);
});
//向右滚动
$(左桨)。在('单击',函数()上){
$('.menu')。设置动画({
scrollLeft:getMenuPosition()-“100”
},持续时间);
});
正文{
保证金:3em;
}
* {
填充:0;
保证金:0;
}
.菜单包装{
位置:相对位置;
最大宽度:500px;
高度:100px;
保证金:1em自动;
边框:1px纯黑;
溢出x:隐藏;
溢出y:隐藏;
}
.菜单{
高度:120px;
背景:#f3;
框大小:边框框;
空白:nowrap;
溢出-x:自动;
溢出y:隐藏;
}
.项目{
显示:内联块;
宽度:100px;
身高:100%;
轮廓:1px点灰色;
填充:1em;
框大小:边框框;
}
}
.划桨{
}
.划桨{
位置:绝对位置;
排名:0;
底部:0;
宽度:3em;
}
.左桨{
左:0;
}
.右桨{
右:0;
}
.隐藏{
显示:无;
}
.打印{
保证金:自动;
最大宽度:500px;
}
跨度{
显示:内联块;
宽度:100px;
}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
> 包装器/可见菜单大小 总菜单大小 不可见菜单大小
滚动位置
您的代码失败,因为在JavaScript中,
'100'+100==“100100”
。将行
scrollLeft:getMenuPosition()+100'
更改为
scrollLeft:getMenuPosition()+100
解决问题


我不明白你为什么要在数字上加一个字符串。你可能应该避免做同样的事情。因此,您应该将
scrollLeft:getMenuPosition()-“100”
更改为
scrollLeft:getMenuPosition()-100

非常感谢!