- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过调用函数将溢出 flexbox 容器的内容从一个 div 水平滚动到另一个 div。
HTML #href 和 jQuery window.location 实现了我的目的,但它们还将容器滚动到窗口的顶部,而不是只滚动容器的内容而不改变窗口位置。
我认为解决方案是:
var currentSlideFocus = $("#select_slide_" + currentSlide).position().left;
$("#slideWindow").scrollLeft(currentSlideFocus);
然而,currentSlideFocus 的值只有我预期的 10% 左右,scrollLeft 的滚动行为量似乎只有 currentSlideFocus 的 10% 左右。给了什么?
position().left 测量的是元素左侧与其容器左侧之间的距离,还是我对它的解释不正确?
这是下面骨架化元素的 JSfiddle。谢谢。 https://jsfiddle.net/goneZoe/sf46ea03/
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
var currentSlide = 1;
var slideLink = 1;
var totalSlides;
var currentSlideFocus;
var slideIntvl;
var slideVW;
jQuery(function() {
totalSlides = $('.slide_frame').length;
$(".current_slide").html(currentSlide);
$(".total_slides").html(totalSlides);
$(".position_left").html(currentSlideFocus);
$(makeControlLinks);
$("#select_slide_" + currentSlide).addClass('active_slide_control');
$(slideSlider);
})();
/* slide every 5 seconds, pause on mouse hover, resume after mouseout */
function slideSlider(){
slideIntvl = setInterval(slideNext, 5000);
$(".slider_wrapper").hover(function() {
clearInterval(slideIntvl);
}, function() {
slideIntvl = setInterval(slideNext, 5000);
});
}
/* previous and next controls */
function slideNext(){
if (currentSlide < totalSlides) {
nextSlide = currentSlide + 1;
} else {
nextSlide = 1;
}
currentSlide = nextSlide;
$(changeSlide);
}
function slidePrev(){
if (currentSlide == 1) {
prevSlide = totalSlides
} else {
prevSlide = currentSlide - 1;
}
currentSlide = prevSlide;
$(changeSlide);
}
/* formula to change that slide when the time comes */
function changeSlide(){
var currentSlideFocus = $("#select_slide_" + currentSlide).position().left;
$("#slideWindow").scrollLeft(currentSlideFocus);
$(".active_slide_control").removeClass('active_slide_control');
$("#select_slide_" + currentSlide).addClass('active_slide_control');
$(".current_slide").html(currentSlide);
$(".position_left").html(currentSlideFocus);
}
/* --------- generate skip-to links ---------- */
function makeControlLinks(){
if (slideLink <= totalSlides){
$("#frame_select").append('<a id="select_slide_'+slideLink+'" class="selector" onclick="selectSlide'+slideLink+'()">'+slideLink+'</a>');
slideLink = slideLink + 1;
$(makeControlLinks);
} else {
return false;
}
}
/* individual jump-to specific controls */
function selectSlide1(){
currentSlide = 1;
$(changeSlide);
}
function selectSlide2(){
currentSlide = 2;
$(changeSlide);
}
function selectSlide3(){
currentSlide = 3;
$(changeSlide);
}
function selectSlide4(){
currentSlide = 4;
$(changeSlide);
}
function selectSlide5(){
currentSlide = 5;
$(changeSlide);
}
function selectSlide6(){
currentSlide = 6;
$(changeSlide);
}
function selectSlide7(){
currentSlide = 7;
$(changeSlide);
}
function selectSlide8(){
currentSlide = 8;
$(changeSlide);
}
function selectSlide9(){
currentSlide = 9;
$(changeSlide);
}
</script>
<style type ="text/css">
#slider_wrapper_container {
position: relative;
display: block;
width: 100vw;
left: -24.15vw;
height: auto;
}
.slider_wrapper {
position: relative;
display: block;
margin: auto;
margin-top: 50px;
margin-bottom: 50px;
width: 65vw;
height: calc(36.562vw + 66px);
border: 1px solid rgb(51, 51, 51);
overflow: hidden;
}
.slide_window {
display: flex;
flex-direction: row;
scroll-behavior: smooth;
overflow-x: hidden;
}
.slide_frame {
position: relative;
display: block;
width: 100%;
height: 100px;
flex-shrink: 0;
border: 2px solid blue;
}
.slide_frame p{
position: relative;
display: block;
width: 1em;
margin: auto;
font-size: 2em;
}
#frame_select {
position: relative;
display: block;
margin: auto;
padding-top: 20px;
text-align: center;
width: 85%;
}
.slider_controls {
position: absolute;
display: block;
height: 66px;
width: 100%;
bottom: 0px;
}
.selector {
padding: 5px;
text-align: center;
text-decoration: none;
margin: 5px;
border: 1px solid rgb(91, 91, 91);
cursor: pointer;
}
.active_slide_control {
background-color: black;
color: white;
cursor: default;
}
#left_arrow, #right_arrow {
position: absolute;
display: inline;
height: 100%;
padding: 10px;
padding-top: 20px;
cursor: pointer;
}
#left_arrow {
float: left;
}
#right_arrow {
float: right;
right: 0px;
top: 0px;
}
#right_arrow {
float: right;
border-bottom-right-radius: 40px 20px;
}
#left_control, #right_control {
height: 50%;
}
</style>
</head>
<body>
<div class="slider_wrapper">
<div id="slideWindow" class="slide_window">
<div id="slide_1" class="slide_frame">
<p>1</p>
</div>
<div id="slide_2" class="slide_frame">
<p>2</p>
</div>
<div id="slide_3" class="slide_frame">
<p>3</p>
</div>
<div id="slide_4" class="slide_frame">
<p>4</p>
</div>
<div id="slide_5" class="slide_frame">
<p>5</p>
</div>
</div>
<div class="slider_controls">
<div id="left_arrow" onclick="slidePrev()">
<a><--</a>
</div>
<div id="frame_select">
</div>
<div id="right_arrow" onclick="slideNext()">
<a>--></a>
</div>
</div>
</div>
<a id="readout">Current slide is #<span class="current_slide">?</span> out of <span class="total_slides">?</span> slides. The position.left value of currentSlide is <span class="position_left">?</span></a>
</body>
</html>
最佳答案
我有点弄清楚了为什么我从 position().left 得到结果,而不是仔细研究 CSS,我重新考虑了我使用变量的方式并去了这条路线,而不是。就像一个魅力。
singleSlideWidth = $(".slide_frame").width();
slideMeasure = currentSlide - 1;
currentSlideDistance = singleSlideWidth * slideMeasure;
$("#slideWindow").scrollLeft(currentSlideDistance);
关于jquery - 如何将 ".position().left"的值和 "scrollLeft"的行为应用于溢出容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54680683/
我有一个左滚动动画,第一次运行时效果很好。如果单击该按钮,滚动将动画到最右侧的区域,然后返回到原始位置。但是,当再次单击该按钮时,内容滚动到最右侧,然后滚动回原始位置。我不明白出了什么问题。请帮忙。提
我有一些包含 jQuery 脚本的页面。除了IE,一切都很好。我无法解决滚动问题出在哪里。 整页是一个长水平页面。每次当我更改页面(页面标识符)时,网页应该向左或向右滚动。以下是我如何处理先前按钮操作
我有一个滚动 div 的函数,如下所示: function scrTo(id, to) { document.getElementById(id).scrollLeft = to; } 并尝试
你好! 我有一个页面具有水平滚动功能。 我有一个侧边栏和一个内容框 在边栏中我有 5 个链接,比如 LINK1 - LINK5 在内容框中,我有 3500px 的宽度,其中包含 5 个 700px 的
我看过这个例子:http://jsfiddle.net/UwEe2/306/这是用 scrollleft 实现的。 现在我做了修改。 这是我的脚本但没有运行:http://jsfiddle.net/n
我尝试在垂直滚动时保持 div 的位置固定,但在水平滚动时它应该跟随。我使用了这个 jquery 脚本: $(window).scroll(function(){ $(".navback").css(
我正在制作一个带有幻灯片的网页,带有 jQuery scrollLeft 函数。我的问题是它在第一个 .slide 上工作,然后 div 滚动到一个完全错误的位置。请注意,我在两个不同的类上使用该函数
所以我试图让特定元素在页面加载时居中显示在屏幕上。该元素两侧各有一个元素,该元素占窗口宽度的 100%。 最终,会有更多的部分,我希望用户能够在所有部分之间自由滚动,尽管出于我正在做的网络应用程序的目
我想知道如何根据星期几设置 .scrollLeft()。 我发现我可以使用 Date().getdate() 获取星期几。星期日返回 0,星期六返回 6。 但是,我正在制定一个水平滚动的时间表。时间表
我有一个容器 div,里面有一个 ul 设置如下 jsFiddle:http://jsfiddle.net/BQPVL/1/ 为什么卷轴不起作用? HTML: hi how a
我正在尝试使用 slider 。 我希望能够滚动到 slider 的特定位置,从 MDN 文档看来,我可以使用 element.scrollLeft 滚动到特定位置。 虽然我似乎没有为我工作.. va
我有一段脚本,其中我设法使鼠标滚轮事件水平而不是垂直移动页面。但我也想为其增添一些动力。我创建了“after”函数,但 body 的 .scrollLeft 不会运行。 var rate = 150;
我这里有一个 jsfiddle - http://jsfiddle.net/stevea/DyfGp/2/ - 外框包含延伸到视口(viewport)之外的内框。这会强制出现水平滚动条。 A“向左走“
这个问题已经有答案了: TypeError: p.easing[this.easing] is not a function (12 个回答) 已关闭 8 年前。 我正在尝试向左滚动并应用缓动。 如果
我这里有以下代码: $(document).ready(function() { $('.scrolls').stop().animate({ scrollLeft : 40
我有一个大容器 DIV,其中包含许多其他元素并且有滚动条。当 DIV 可见时,我得到了 scrollLeft 的数量,但是当我隐藏元素时,scrollLeft() 返回 0。 同样,如果我在 scro
这是一个奇怪的案例。我只是 fork 了 Remy Sharp 的一个旧示例(jQuery infinite carousel),但这次代码根本不起作用。我的代码中唯一的区别是我需要有固定数量的元素而
我有一个具有固定位置的元素,但可以使用我在 this example on JsFiddle. 中使用的 jQuery 计算来左右滚动 $(window).scroll(function(event)
好的,我正在使用 jQuery,目前正在获取滚动条的最大值: var $body = $('body'); $body.scrollLeft(99999); // will give me the m
我有这个脚本: Array.prototype.forEach.call(document.querySelectorAll(".thumbs div"), function ($div)
我是一名优秀的程序员,十分优秀!