- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 仔细观察,在调整视口(viewport)大小时,这非常糟糕。它停止工作或在狭窄的窗口上工作,并且滚动速度 super 快。所以我把它放出来赏金!
--
我见过类似的东西,并一直在尝试重构 JS。我有两列内容,滚动时会朝相反的方向移动。这应该连续循环。
问题是如果我从 .project
中删除高度元素。向下滚动而不是向上滚动时,内容将平滑滚动。内容的高度/长度会有所不同,所以我在这里不能真正有一个固定值。
这似乎取决于视口(viewport)高度。如果 UI 的行为符合预期并且我减小了视口(viewport)的宽度,它可能会像上面描述的那样停止工作。但是,如果我随后降低高度 - 它可以再次开始正常运行。所以也许这取决于加载时视口(viewport)中有多少内容可见?
示例(也在代码片段中): https://jsfiddle.net/rdowb0y5/1
我将添加一个“媒体查询”,以便它仅在平板电脑/桌面 View 和移动设备上可见,JS 被删除并且内容只是堆叠。
在此先感谢 - 真的很期待对此的一些支持!
$(document).ready(function() {
var num_children=$('.split-loop__left').children().length;
var child_height=$('.split-loop__right').height() / num_children;
var half_way=num_children * child_height / 2;
$(window).scrollTop(half_way);
function crisscross() {
var parent=$(".split-loop"); //.first();
var clone=$(parent).clone();
var leftSide=$(clone).find('.split-loop__left');
var rightSide=$(clone).find('.split-loop__right');
if (window.scrollY > half_way) {
//We are scrolling up
$(window).scrollTop(half_way - child_height);
var firstLeft=$(leftSide).children().first();
var lastRight=$(rightSide).children().last();
lastRight.appendTo(leftSide);
firstLeft.prependTo(rightSide);
}
else if (window.scrollY < half_way - child_height) {
var lastLeft=$(leftSide).children().last();
var firstRight=$(rightSide).children().first();
$(window).scrollTop(half_way);
lastLeft.appendTo(rightSide);
firstRight.prependTo(leftSide);
}
$(leftSide).css('bottom', '-'+ window.scrollY + 'px');
$(rightSide).css('bottom', '-'+ window.scrollY + 'px');
$(parent).replaceWith(clone);
}
$(window).scroll(crisscross);
}
);
/* Hide Scroll Bars */
::-webkit-scrollbar {
display: none;
}
html,
body {
margin: 0;
padding: 0;
-ms-overflow-style: none;
/* IE and Edge */
scrollbar-width: none;
/* Firefox */
}
/* Basic Styling */
img {
border: 1px solid black;
margin-bottom: 24px;
width: 100%;
max-width: 100%;
}
h2 {
font-size: 14px;
font-weight: normal;
margin-bottom: 4px;
font-family: 'Inter', sans-serif;
}
p {
color: black;
font-size: 11px;
font-family: 'Inter', sans-serif;
}
/* Content will be in these eventually */
.bar-left,
.bar-right {
border-right: 1px solid black;
box-sizing: border-box;
height: 100vh;
position: fixed;
top: 0;
left: 0;
width: 48px;
z-index: 10000;
}
.bar-right {
border: none;
border-left: 1px solid black;
left: auto;
right: 0;
}
/* Split Loop */
.split-loop {
position: relative;
margin: 0 48px;
}
.split-loop__left {
// position: absolute;
// left: 0%;
// top: 0%;
// right: auto;
// bottom: auto;
// z-index: 4;
width: 50%;
}
.split-loop__right {
border-left: 1px solid black;
box-sizing: border-box;
position: fixed;
right: 48px;
bottom: 0;
z-index: 5;
width: calc(50% - 48px);
}
.project {
box-sizing: border-box;
border-bottom: 1px solid black;
height: 600px;
padding: 48px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<header class="bar-left">
</header>
<div class="bar-right">
</div>
<div class="view">
<div class="grid split-loop">
<div class="split-loop__left">
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
</div>
<div class="split-loop__right">
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title</h2>
<p class="project__desc">Short Description</p>
</div>
</div>
</div>
</div>
最佳答案
Familytype.co 有以下限制:
.block--50
和 .block--100
风格规则。 let view, parent, leftSide, rightSide;
$(document).ready(function() {
view = $('#view');
parent = $(".split-loop");
leftSide = $(parent).find('.split-loop__left');
rightSide = $(parent).find('.split-loop__right');
centerScrollPosition();
window.onresize = function(event) {
centerScrollPosition();
};
//repeat first 2
$(leftSide).append($($(leftSide).children()[0]).clone());
$(leftSide).append($($(leftSide).children()[1]).clone());
//clone left lane to right
let arr = [];
$(leftSide).children().each((index, elm) => {
arr.push($(elm).clone());
});
//shift right lane by half
//arr.push.apply(arr, arr.splice(0, arr.length / 2));
//arr.push(arr[0].clone());
//arr.push(arr[1].clone());
$(rightSide).append(arr);
//listen to scroll events
//incase you want movement to happen on user scroll
$(view).add(window).scroll(function() {
//$(view).on('wheel', function (event) {
handleScroll();
});
handleScroll();
});
function centerScrollPosition() {
//center the content
var vh = $(window).height();
var lh = leftSide.height();
var half_way = (lh - vh) / 2;
$(window).scrollTop(half_way);
}
function handleScroll() {
var scroll = $(window).scrollTop();
var sh = $(leftSide).height() - window.innerHeight;
if (scroll >= (sh - 1)) {
$(window).scrollTop(2);
} else if (scroll == 0) {
$(window).scrollTop(sh - 1);
}
$(rightSide).css({
"transform": "translate3d(0, " + ((((sh) - scroll * 2) * -1)) + "px, 0)"
});
}
* {
box-sizing: border-box;
}
::-webkit-scrollbar {
display: none;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
background-color: white;
}
body {
overflow-y: scroll
}
/* Basic Styling */
img {
max-width: 90%;
object-fit: fill;
margin-top: 1rem;
align-self: center;
border: 1px solid black;
}
h2 {
font-size: 14px;
font-weight: normal;
margin-bottom: 4px;
font-family: 'Inter', sans-serif;
text-align: center;
}
p {
color: black;
font-size: 11px;
font-family: 'Inter', sans-serif;
text-align: center;
}
/* center line for debugging */
.center {
position: fixed;
width: 100vw;
top: 50%;
left: 0%;
z-index: 100000;
transform: translateY(-50%);
border-bottom: 2px dashed gray;
}
/* Content will be in these eventually */
.view {
overflow: hidden;
position: relative;
width: 80vw;
margin: 0 auto;
}
.bar-left,
.bar-right {
/*border-right: 1px solid black;*/
box-sizing: border-box;
height: 100vh;
position: fixed;
top: 0;
left: 0;
width: 5vw;
z-index: 10000;
}
.bar-right {
border: none;
/*border-left: 1px solid black;*/
left: auto;
right: 0;
}
/* Split Loop */
.split-loop {
position: relative;
width: 100%;
height: 100%;
}
.split-loop>div {
max-width: 50%;
float: left;
height: auto;
transform-style: preserve-3d;
display: flex;
flex-flow: column;
}
.split-loop__right {
will-change: transform;
perspective: 1000;
backface-visibility: hidden;
}
.project {
border: 1px solid black;
min-height: auto;
background-color: lightskyblue;
display: flex;
flex-flow: column nowrap;
}
@media(max-width: 576px) {
.split-loop>div {
max-width: 100%;
}
.split-loop__right {
display: none;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- span class="center"></span -->
<header class="bar-left"></header>
<div class="bar-right"></div>
<div id=view class="view">
<div class="grid split-loop">
<div class="split-loop__left">
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 1</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequuntur, id?Short Description Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequuntur, id?</p>
</div>
<div class="grid__item project">
<img src="https://www.placecage.com/c/460/300" alt="" class="project__media" />
<h2 class="project__title">Project Title 2</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet.</p>
</div>
<div class="grid__item project">
<img src="https://www.placecage.com/g/155/300" alt="" class="project__media" />
<h2 class="project__title">Project Title 3</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur, adipisicing elit. Aspernatur nostrum in obcaecati itaque explicabo voluptatibus corporis cumque praesentium eaque beatae!</p>
</div>
<div class="grid__item project">
<img src="https://www.placecage.com/140/100" alt="" class="project__media" />
<h2 class="project__title">Project Title 4</h2>
<p class="project__desc">Short Description Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolores nobis eius, minus optio ab earum. Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, at. Fuga nisi nulla laborum explicabo possimus repellendus
amet quidem eos.</p>
</div>
<div class="grid__item project">
<img src="https://www.stevensegallery.com/460/300" alt="" class="project__media" />
<h2 class="project__title">Project Title 5</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur adipisicing elit. Nihil?</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 6</h2>
<p class="project__desc">Short Description Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quia iste distinctio doloremque facere!</p>
</div>
</div>
<div class="split-loop__right">
</div>
</div>
</div>
//variables to track left and right container scrolls
var leftX = 0, rightX = 0;
//how quickly shifts will happen
//depends on how many images are in a column
//range 1.0 - 5.0
var shiftingThreshold = 1.7;
var isAnimating = false;
var parent, leftSide, rightSide;
$(document).ready(function () {
parent = $(".split-loop");
leftSide = $(parent).find('.split-loop__left');
rightSide = $(parent).find('.split-loop__right');
centerScrollPosition();
window.onresize = function (event) {
centerScrollPosition();
};
document.querySelector('.split-loop__left').addEventListener('transitionend', () => {
isAnimating = false;
//positive value means clockwise
//negative means counter clockwise
//remove if you don't want to run loop
//handleScroll(-125);
});
//listen to scroll events
//incase you want movement to happen on user scroll
$('#view').on('wheel', function (event) {
handleScroll(event.originalEvent.deltaY);
});
//initiate continuous loop
setTimeout(function () {
//handleScroll(-125);
}, 3000);
});
function centerScrollPosition() {
//center the content
var vh = $('#view').height();
var slh = $('.split-loop__left').height();
var half_way = (slh - vh) / 2;
$('#view').scrollTop(half_way);
}
function handleScroll(deltaY) {
//handle next scroll event only after last transition ends.
if (isAnimating) {
return;
}
isAnimating = true;
var isUpShifted = true;
var isJumped = true;
leftX -= deltaY;
rightX += deltaY;
if (deltaY !== 0) {
var childHeight = $('.split-loop__left').children().first().height();
if ((leftX + childHeight / shiftingThreshold) <= 0) { //clockwise shift
isUpShifted = true;
var firstLeft = $(leftSide).children().first();
var lastRight = $(rightSide).children().last();
//shift left-first to right
firstLeft.prependTo(rightSide);
//shift right-last to left
lastRight.appendTo(leftSide);
leftX += childHeight + deltaY;
rightX -= childHeight + deltaY;
} else if ((leftX - childHeight / shiftingThreshold) > 0) { //anti clockwise shift
isUpShifted = false;
var lastLeft = $(leftSide).children().last();
var firstRight = $(rightSide).children().first();
//shift right-first to left
firstRight.prependTo(leftSide);
//shift left-last to right
lastLeft.appendTo(rightSide);
leftX -= childHeight - deltaY;
rightX += childHeight - deltaY;
} else {
isJumped = false;
}
//if we've moved projects to other container then
//adjust position before smooth scrolling effect
if (isJumped) {
$('.split-loop__left').css('transform', 'translateY(' + leftX + 'px)');
$('.split-loop__right').css('transform', 'translateY(' + rightX + 'px)');
$('.split-loop__left').css('transition-duration', '0s');
$('.split-loop__right').css('transition-duration', '0s');
if (isUpShifted) {
leftX -= deltaY;
rightX += deltaY;
} else {
leftX -= deltaY;
rightX += deltaY;
}
}
//do smooth scroll effect
setTimeout(function () {
$('.split-loop__left').css('transition-duration', '1.5s');
$('.split-loop__right').css('transition-duration', '1.5s');
$('.split-loop__left').css('transform', 'translateY(' + leftX + 'px)');
$('.split-loop__right').css('transform', 'translateY(' + rightX + 'px)');
}, 5);
}
}
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
background-color: wheat;
}
/* Basic Styling */
img {
max-width: 80%;
aspect-ratio: 6/4;
object-fit: fill;
margin-top: 10%;
align-self: center;
border: 1px solid black;
}
h2 {
font-size: 14px;
font-weight: normal;
margin-bottom: 4px;
font-family: 'Inter', sans-serif;
text-align: center;
}
p {
color: black;
font-size: 11px;
font-family: 'Inter', sans-serif;
text-align: center;
}
/* center line for debugging */
.center {
position: fixed;
width: 100vw;
top: 50%;
left: 0%;
z-index: 100000;
transform: translateY(-50%);
border-bottom: 2px dashed gray;
}
/* Content will be in these eventually */
.view {
overflow: hidden;
position: relative;
width: 80vw;
height: 100vh;
margin: 0 auto;
}
.bar-left,
.bar-right {
/*border-right: 1px solid black;*/
box-sizing: border-box;
height: 100vh;
position: fixed;
top: 0;
left: 0;
width: 5vw;
z-index: 10000;
}
.bar-right {
border: none;
/*border-left: 1px solid black;*/
left: auto;
right: 0;
}
/* Split Loop */
.split-loop {
position: relative;
width: 100%;
height: 100%;
}
.split-loop>div {
max-width: 50%;
float: left;
transition-timing-function: linear;
height: auto;
will-change: transform;
}
.project {
border: 1px solid black;
min-height: 70vh;
background-color: lightskyblue;
display: flex;
flex-flow: column nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- span class="center"></span -->
<header class="bar-left"></header>
<div class="bar-right"></div>
<div id=view class="view">
<div class="grid split-loop">
<div class="split-loop__left">
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 1</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur adipisicing elit.
Consequuntur, id?</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 2</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet.</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 3</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Aspernatur nostrum in obcaecati itaque explicabo voluptatibus corporis cumque praesentium eaque beatae!</p>
</div>
</div>
<div class="split-loop__right">
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 4</h2>
<p class="project__desc">Short Description Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolores
nobis eius, minus optio ab earum.</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 5</h2>
<p class="project__desc">Short Description Lorem ipsum dolor sit amet consectetur adipisicing elit. Nihil?</p>
</div>
<div class="grid__item project">
<img src="https://www.fillmurray.com/g/600/400" alt="" class="project__media" />
<h2 class="project__title">Project Title 6</h2>
<p class="project__desc">Short Description Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quia iste
distinctio doloremque facere!</p>
</div>
</div>
</div>
</div>
shiftingThreshold
.
关于javascript - 拆分列(每个 50%)以相反方向滚动 - 连续/循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70323333/
我是 PHP 新手。我一直在脚本中使用 for 循环、while 循环、foreach 循环。我想知道 哪个性能更好? 选择循环的标准是什么? 当我们在另一个循环中循环时应该使用哪个? 我一直想知道要
我在高中的编程课上,我的作业是制作一个基本的小计和顶级计算器,但我在一家餐馆工作,所以制作一个只能让你在一种食物中读到。因此,我尝试让它能够接收多种食品并将它们添加到一个价格变量中。抱歉,如果某些代码
这是我正在学习的一本教科书。 var ingredients = ["eggs", "milk", "flour", "sugar", "baking soda", "baking powder",
我正在从字符串中提取数字并将其传递给函数。我想给它加 1,然后返回字符串,同时保留前导零。我可以使用 while 循环来完成此操作,但不能使用 for 循环。 for 循环只是跳过零。 var add
编辑:我已经在程序的输出中进行了编辑。 该程序要求估计给定值 mu。用户给出一个值 mu,同时还提供了四个不等于 1 的不同数字(称为 w、x、y、z)。然后,程序尝试使用 de Jaeger 公式找
我正在编写一个算法,该算法对一个整数数组从末尾到开头执行一个大循环,其中包含一个 if 条件。第一次条件为假时,循环可以终止。 因此,对于 for 循环,如果条件为假,它会继续迭代并进行简单的变量更改
现在我已经习惯了在内存非常有限的情况下进行编程,但我没有答案的一个问题是:哪个内存效率更高;- for(;;) 或 while() ?还是它们可以平等互换?如果有的话,还要对效率问题发表评论! 最佳答
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 8 年前。 我正在尝试创建一个小程序,我可以在其中读取该程序的单词。如果单词有 6
这个问题在这里已经有了答案: python : list index out of range error while iteratively popping elements (12 个答案) 关
我正在尝试向用户请求 4 到 10 之间的整数。如果他们回答超出该范围,它将进入循环。当用户第一次正确输入数字时,它不会中断并继续执行 else 语句。如果用户在 else 语句中正确输入数字,它将正
我尝试创建一个带有嵌套 foreach 循环的列表。第一个循环是循环一些数字,第二个循环是循环日期。我想给一个日期写一个数字。所以还有另一个功能来检查它。但结果是数字多次写入日期。 Out 是这样的:
我想要做的事情是使用循环创建一个数组,然后在另一个类中调用该数组,这不会做,也可能永远不会做。解决这个问题最好的方法是什么?我已经寻找了所有解决方案,但它们无法编译。感谢您的帮助。 import ja
我尝试创建一个带有嵌套 foreach 循环的列表。第一个循环是循环一些数字,第二个循环是循环日期。我想给一个日期写一个数字。所以还有另一个功能来检查它。但结果是数字多次写入日期。 Out 是这样的:
我正在模拟一家快餐店三个多小时。这三个小时分为 18 个间隔,每个间隔 600 秒。每个间隔都会输出有关这 600 秒内发生的情况的统计信息。 我原来的结构是这样的: int i; for (i=0;
这个问题已经有答案了: IE8 for...in enumerator (3 个回答) How do I check if an object has a specific property in J
哪个对性能更好?这可能与其他编程语言不一致,所以如果它们不同,或者如果你能用你对特定语言的知识回答我的问题,请解释。 我将使用 c++ 作为示例,但我想知道它在 java、c 或任何其他主流语言中的工
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我是 C 编程和编写代码的新手,以确定 M 测试用例的质因数分解。如果我一次只扫描一次,该功能本身就可以工作,但是当我尝试执行 M 次时却惨遭失败。 我不知道为什么 scanf() 循环有问题。 in
这个问题已经有答案了: JavaScript by reference vs. by value [duplicate] (4 个回答) 已关闭 3 年前。 我在使用 TSlint 时遇到问题,并且理
我尝试在下面的代码中添加 foreach 或 for 循环,以便为 Charts.js 创建多个数据集。这将允许我在此折线图上创建多条线。 我有一个 PHP 对象,我可以对其进行编码以稍后填充变量,但
我是一名优秀的程序员,十分优秀!