绝对元素随着 div 的滚动而滚动
absolute element scrolls as the div is scrolled
我正在制作一个页面,您在该页面上的点击会被记录下来并保留在被点击的 div 中。
但是,只要您滚动四个 div 之一,.note
div(包含“触摸”文本)就应该与 div 一起滚动在。
我已经尝试了一些东西,但我似乎无法找到一种方法来完成这项工作...
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.wrapper');
$('.note:last').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
body{
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
grid-column: 1 / 2;
}
.two {
position : relative;
overflow: scroll;
background-color: tan;
grid-column: 2 / 3;
height: 100%;
}
.three {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 3 / 4;
height: 100%;
}
.four {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 4 / 4;
height: 100%;
}
.one::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.two::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.three::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.four::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.note{
text-align: center;
width:100px;
height: 30px;}
.direction{
position: absolute;
bottom : 0;
width: 25vw;
text-align: center;
}
.username{
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="two">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="three"></div>
<div class="four"></div>
</div>
<div class="note"></div>
<div class ="texte"></div>
<div class="note" style="display: none;">touch</div>
查看更新后的代码。
我把你的 jQuery 改成了:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.wrapper');
$('.note:last').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
对此:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.one').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
根据我的更改,您必须为每个 div 指定 jQuery,如果您希望它适用于您的其他 div。
此外,您还必须调整您的定位,以便它适用于整个 div。
运行 下面的片段:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.one').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
body{
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
grid-column: 1 / 2;
}
.two {
position : relative;
overflow: scroll;
background-color: tan;
grid-column: 2 / 3;
height: 100%;
}
.three {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 3 / 4;
height: 100%;
}
.four {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 4 / 4;
height: 100%;
}
.one::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.two::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.three::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.four::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.note{
text-align: center;
width:100px;
height: 30px;}
.direction{
position: absolute;
bottom : 0;
width: 25vw;
text-align: center;
}
.username{
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="two">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="three"></div>
<div class="four"></div>
</div>
<div class="note"></div>
<div class ="texte"></div>
<div class="note" style="display: none;">touch</div>
为了与单击的列一起滚动,您需要 .append()
.note
到正确的列。
将事件处理程序更改为 $(".wrapper>div")
以获得 div 单击,您可以使用 .append(this)
.
对列左侧位置的调整和对 css 的一些调整,其中 .three/.four 具有不同的属性(没有 position:relative
),这似乎可以正常工作
编辑:添加了 .scrollTop() adjustment
$(".wrapper>div").click(function(c) {
var tw = 100 / 2;
var th = 30 / 2;
$('.note:last').clone().appendTo(this).css({
position: 'absolute',
display: "block",
left: c.pageX - tw - $(this).position().left,
top: c.pageY - th + $(this).scrollTop()
});
});
body {
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one,
.two,
.three,
.four {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
}
.one {
grid-column: 1 / 2;
}
.two {
grid-column: 2 / 3;
}
.three {
grid-column: 3 / 4;
}
.four {
grid-column: 4 / 4;
}
.note {
text-align: center;
width: 100px;
height: 30px;
}
.direction {
position: absolute;
bottom: 0;
width: 25vw;
text-align: center;
}
.username {
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br>
</div>
<div class="two">
br<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br>
</div>
<div class="three">col 3</div>
<div class="four">col 4</div>
</div>
<div class="note"></div>
<div class="texte"></div>
<div class="note" style="display: none;">touch</div>
我正在制作一个页面,您在该页面上的点击会被记录下来并保留在被点击的 div 中。
但是,只要您滚动四个 div 之一,.note
div(包含“触摸”文本)就应该与 div 一起滚动在。
我已经尝试了一些东西,但我似乎无法找到一种方法来完成这项工作...
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.wrapper');
$('.note:last').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
body{
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
grid-column: 1 / 2;
}
.two {
position : relative;
overflow: scroll;
background-color: tan;
grid-column: 2 / 3;
height: 100%;
}
.three {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 3 / 4;
height: 100%;
}
.four {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 4 / 4;
height: 100%;
}
.one::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.two::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.three::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.four::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.note{
text-align: center;
width:100px;
height: 30px;}
.direction{
position: absolute;
bottom : 0;
width: 25vw;
text-align: center;
}
.username{
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="two">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="three"></div>
<div class="four"></div>
</div>
<div class="note"></div>
<div class ="texte"></div>
<div class="note" style="display: none;">touch</div>
查看更新后的代码。
我把你的 jQuery 改成了:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.wrapper');
$('.note:last').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
对此:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.one').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
根据我的更改,您必须为每个 div 指定 jQuery,如果您希望它适用于您的其他 div。
此外,您还必须调整您的定位,以便它适用于整个 div。
运行 下面的片段:
$(document.body).click(function (c) {
var tw = 100/2;
var th = 30/2;
$('.note:last').clone().appendTo('.one').css({ position: 'absolute', display: "block",
left: c.pageX-tw, top: c.pageY-th
});
// $('.note').remove();
});
body{
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
grid-column: 1 / 2;
}
.two {
position : relative;
overflow: scroll;
background-color: tan;
grid-column: 2 / 3;
height: 100%;
}
.three {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 3 / 4;
height: 100%;
}
.four {
-ms-overflow-style: none; /* Internet Explorer 10+ */
scrollbar-width: none; /* Firefox */
overflow: scroll;
background-color: tan;
grid-column: 4 / 4;
height: 100%;
}
.one::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.two::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.three::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.four::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
.note{
text-align: center;
width:100px;
height: 30px;}
.direction{
position: absolute;
bottom : 0;
width: 25vw;
text-align: center;
}
.username{
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="two">
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
br<br>
</div>
<div class="three"></div>
<div class="four"></div>
</div>
<div class="note"></div>
<div class ="texte"></div>
<div class="note" style="display: none;">touch</div>
为了与单击的列一起滚动,您需要 .append()
.note
到正确的列。
将事件处理程序更改为 $(".wrapper>div")
以获得 div 单击,您可以使用 .append(this)
.
对列左侧位置的调整和对 css 的一些调整,其中 .three/.four 具有不同的属性(没有 position:relative
),这似乎可以正常工作
编辑:添加了 .scrollTop() adjustment
$(".wrapper>div").click(function(c) {
var tw = 100 / 2;
var th = 30 / 2;
$('.note:last').clone().appendTo(this).css({
position: 'absolute',
display: "block",
left: c.pageX - tw - $(this).position().left,
top: c.pageY - th + $(this).scrollTop()
});
});
body {
font-family: sans-serif;
font-size: 1.3rem;
margin: 0;
background-color: DarkSlateGray;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 5px;
grid-auto-rows: minmax(100vh, auto);
height: 100vh;
}
.one,
.two,
.three,
.four {
position: relative;
overflow: scroll;
height: 100%;
background-color: tan;
}
.one {
grid-column: 1 / 2;
}
.two {
grid-column: 2 / 3;
}
.three {
grid-column: 3 / 4;
}
.four {
grid-column: 4 / 4;
}
.note {
text-align: center;
width: 100px;
height: 30px;
}
.direction {
position: absolute;
bottom: 0;
width: 25vw;
text-align: center;
}
.username {
background-color: red;
display: block;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
<div class="one">
br<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br>
</div>
<div class="two">
br<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br> br
<br>
</div>
<div class="three">col 3</div>
<div class="four">col 4</div>
</div>
<div class="note"></div>
<div class="texte"></div>
<div class="note" style="display: none;">touch</div>