mirror of https://github.com/sveltejs/svelte
add scrollTop and scrollLeft bindings - fixes #3780
parent
ad2aac509d
commit
e535aed54a
@ -0,0 +1,72 @@
|
||||
/* generated by Svelte vX.Y.Z */
|
||||
import {
|
||||
SvelteComponent,
|
||||
add_render_callback,
|
||||
attr,
|
||||
detach,
|
||||
element,
|
||||
init,
|
||||
insert,
|
||||
listen,
|
||||
noop,
|
||||
safe_not_equal
|
||||
} from "svelte/internal";
|
||||
|
||||
function create_fragment(ctx) {
|
||||
let div1;
|
||||
let scrolling = false;
|
||||
let scrolling_timeout;
|
||||
let clear_scrolling = () => scrolling = false;
|
||||
let dispose;
|
||||
add_render_callback(ctx.div1_scroll_handler);
|
||||
|
||||
return {
|
||||
c() {
|
||||
div1 = element("div");
|
||||
div1.innerHTML = `<div class="content"></div>`;
|
||||
attr(div1, "class", "viewport");
|
||||
dispose = listen(div1, "scroll", ctx.div1_scroll_handler);
|
||||
},
|
||||
m(target, anchor) {
|
||||
insert(target, div1, anchor);
|
||||
},
|
||||
p(changed, ctx) {
|
||||
if ((changed.x || changed.y) && !scrolling) {
|
||||
scrolling = true;
|
||||
clearTimeout(scrolling_timeout);
|
||||
div1.scrollLeft = ctx.x;
|
||||
div1.scrollTop = ctx.y;
|
||||
scrolling_timeout = setTimeout(clear_scrolling, 100);
|
||||
}
|
||||
},
|
||||
i: noop,
|
||||
o: noop,
|
||||
d(detaching) {
|
||||
if (detaching) detach(div1);
|
||||
dispose();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function instance($$self, $$props, $$invalidate) {
|
||||
let x;
|
||||
let y;
|
||||
|
||||
function div1_scroll_handler() {
|
||||
x = this.scrollLeft;
|
||||
y = this.scrollTop;
|
||||
$$invalidate("x", x);
|
||||
$$invalidate("y", y);
|
||||
}
|
||||
|
||||
return { x, y, div1_scroll_handler };
|
||||
}
|
||||
|
||||
class Component extends SvelteComponent {
|
||||
constructor(options) {
|
||||
super();
|
||||
init(this, options, instance, create_fragment, safe_not_equal, {});
|
||||
}
|
||||
}
|
||||
|
||||
export default Component;
|
@ -0,0 +1,10 @@
|
||||
<script>
|
||||
let x;
|
||||
let y;
|
||||
</script>
|
||||
|
||||
<div class="viewport" bind:scrollLeft={x} bind:scrollTop={y}>
|
||||
<div class="content">
|
||||
<!-- content goes here -->
|
||||
</div>
|
||||
</div>
|
Loading…
Reference in new issue