简体   繁体   English

添加弹跳效果以滚动

[英]Add bounce effect to scroll

I am trying to create a smooth scrolling experience **with* a bounce effect when the user over-scrolls, ie scrolls too much to the bottom or top. 我试图创建一个平滑的滚动体验**,当用户过度滚动时,*具有弹跳效果,即滚动太多到底部或顶部。 This answer answers how to scroll smoothly, but I'm also trying to bounce when it scrolls out of bounds. 这个答案回答了如何顺利滚动,但我也试图在它滚出界限时反弹。 Something like this: 像这样的东西:

Note. 注意。 Although this gif shows for mobile, I want to implement that for all browsers, desktop and mobil. 虽然这个gif显示为移动设备,但我希望为所有浏览器,桌面设备和移动设备实现这一功能。

在此输入图像描述

I tried adding the following code to the interval: 我尝试将以下代码添加到间隔:

// 50 = Padding
if (tgt.scrollTop < 50 || tgt.scrollTop > tgt.scrollHeight - tgt.offsetHeight - 50) {
    pos = Math.bounce(step++, start, change, steps);
} else {
    pos = Math.easeOut(step++, start, change, steps);
}

But it doesn't give the desired effect. 但它没有产生预期的效果。 It doesn't bounce at the correct scrolling time, and the bounce isn't real looking, it's not big enough. 它不会在正确的滚动时间反弹,反弹不是真实的,它不够大。

(I'm looking for something like this effect , but I want to create it myself, and understand the code.) (我正在寻找类似这种效果的东西,但我想自己创建它,并理解代码。)

How can I create a bouncing effect when the scroll goes to the top or bottom? 当滚动到顶部或底部时,如何创建弹跳效果?

I don't want answers with a link to a complex library because I want to create it myself. 我不想要链接到复杂库的答案,因为我想自己创建它。 And I want vanilla JavaScript. 我想要vanilla JavaScript。

JSFiddle 的jsfiddle

 console.clear(); /* Smooth scroll */ Math.easeOut = function(t, b, c, d) { t /= d; return -c * t * (t - 2) + b; }; // Out Back Quartic Math.bounce = function(t, b, c, d) { var ts = (t /= d) * t; var tc = ts * t; return b + c * (4 * tc + -9 * ts + 6 * t); }; (function() { // do not mess global space var interval, // scroll is being eased mult = 0, // how fast do we scroll dir = 0, // 1 = scroll down, -1 = scroll up steps = 50, // how many steps in animation length = 30; // how long to animate function MouseWheelHandler(e) { e.preventDefault(); // prevent default browser scroll clearInterval(interval); // cancel previous animation ++mult; // we are going to scroll faster var delta = -Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); if (dir != delta) { // scroll direction changed mult = 1; // start slowly dir = delta; } for (var tgt = e.target; tgt != document.documentElement; tgt = tgt.parentNode) { var oldScroll = tgt.scrollTop; tgt.scrollTop += delta; if (oldScroll != tgt.scrollTop) break; } var start = tgt.scrollTop; var end = start + length * mult * delta; // where to end the scroll var change = end - start; // base change in one step var step = 0; // current step interval = setInterval(function() { var pos; // 50 = Padding if (tgt.scrollTop < 50 || tgt.scrollTop > tgt.scrollHeight - tgt.offsetHeight - 50) { pos = Math.bounce(step++, start, change, steps); } else { pos = Math.easeOut(step++, start, change, steps); } tgt.scrollTop = pos; if (step >= steps) { // scroll finished without speed up - stop by easing out mult = 0; clearInterval(interval); } }, 10); } var myP = document.getElementById('myP'); myP.addEventListener("mousewheel", MouseWheelHandler, false); // window.addEventListener("DOMMouseScroll", MouseWheelHandler, false); })(); 
 p { height: 300px; overflow: auto; background-color: orange; padding: 50px 0; } 
 <p id="myP">Lorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempusLorem ipsum dolor sit amet consectetuer laoreet faucibus id ut et. Consequat Ut tellus enim ante nulla molestie vitae sem interdum turpis. Fames ridiculus cursus pellentesque Vestibulum justo sem lorem neque accumsan nulla. Lacinia Suspendisse vitae libero sem et laoreet risus Sed condimentum Cras. Nunc massa mauris tempor dolor pulvinar justo neque dui ipsum vitae. Lacinia dui scelerisque Sed convallis nonummy orci Vestibulum orci tempus</p> 

Well, I'm the author of smooth-scrollbar :) 好吧,我是smooth-scrollbar的作者:)

Actually, this question may be much more complex than you've ever imagined. 实际上,这个问题可能比你想象的要复杂得多。 Now I'll show you a basic implement of overscroll bouncing. 现在我将向您展示过度弹跳的基本实现。 Demo 演示

We're going to use CSS 3d transform to simulate the bouncing effect, so the DOM structure will be: 我们将使用CSS 3d变换来模拟弹跳效果,因此DOM结构将是:

<article class="container">
    <section class="content">
        your content...
    </section>
</article>

The first thing to do is to create a render loop that applies transform style into .content : 首先要做的是创建一个将变换样式应用到.content的渲染循环:

function render() {
    content.style.transform = `translate3d(...)`;

    requestAnimationFrame(render);
}

render();

And now, let's initialize two variables for state recording: 现在,让我们初始化两个状态记录变量:

let offset = 0;     // final position
let rendered = 0;   // rendered part

Then, applying momentum scrolling with a damping factor: 然后,使用阻尼因子应用动量滚动:

const damping = 0.8;

function render() {
    ...
    const dis = offset - rendered;

    // throw away float part
    const next = offset - (dis * damping | 0);

    content.style.transform = `translate3d(0, ${-next}px, 0)`;
    rendered = next;
    ...
}

By now, we can scroll to the offset we want, but what about the springback? 到现在为止,我们可以滚动到我们想要的偏移量,但是回弹呢?

The magic is reducing offset while rendering, therefore the change of offset will be like a normal curve - from 0 to highest then falling back to 0: 神奇的是在渲染时减少offset ,因此offset的变化将像正常曲线 - 从0到最高然后回落到0:

function render() {
    ...
    offset = offset / 2 | 0;
    ...
}

Now the render function is like this: 现在render函数是这样的:

function render() {
    const dis = offset - rendered;

    // throw away float part
    const next = offset - (dis * damping | 0);

    content.style.transform = `translate3d(0, ${-next}px, 0)`;

    rendered = next;
    offset = offset / 2 | 0;

    requestAnimationFrame(render);
}

Hmmm, it looks much nicer now! 嗯,现在看起来好多了! The last thing is to handle input events(wheel, touch...), here's a simple snippet for wheel events: 最后一件事是处理输入事件(wheel,touch ...),这里是一个简单的wheel事件片段:

// wheel events handler
[
    'wheel',
    'mousewheel'
].forEach(name => {
    container.addEventListener(name, evt => {
        const { y } = getDelta(evt);
        const nextScroll = container.scrollTop + y;

        // check if scrolling onto very edge
        if (nextScroll > 0 &&
            nextScroll < container.scrollHeight - container.clientHeight
        ) {
            return;
        }

        evt.preventDefault();

        offset += y;
    });
});

Okay, now we got a basic bouncing model. 好的,现在我们得到了一个基本的弹跳模型。 You can check full code on Codepen: http://codepen.io/idiotWu/pen/EgNdXK . 您可以在Codepen上查看完整代码: http ://codepen.io/idiotWu/pen/EgNdXK。

However, there are still dozens of issues to be fixed. 但是,仍有许多问题需要解决。 For example, since we're not able to detect whether user left the trackpad(like touchend event), we can't perform springback like the native one - scrolling back when users moved away from their trackpad. 例如,由于我们无法检测用户是否离开了触控板(如touchend事件),因此我们无法像本机一样执行回弹 - 当用户离开触控板时向后滚动。 And as a result, you may suffer from shaking when over scrolling. 因此,滚动时可能会受到震动。

To avoid shaking, you can set a flag to prevent movement from increasing as what I have tried . 为避免晃动,您可以设置一个标志,以防止移动增加, 就像我尝试过的那样 The major idea is to ignore wheel events when it's scrolling back. 主要思想是在滚动回来时忽略滚轮事件。

=========== ===========

As for mobile devices, you can write you own handlers for touch events. 对于移动设备,您可以编写自己的触摸事件处理程序。 But keep in mind that it should not scroll back until you release your fingers, so you may need another flag to keep offset from reducing. 但请记住,在释放手指之前不应向后滚动,因此您可能需要另一个标记来offset减少。 It would be a bit hard to play with so many states. 与这么多州一起玩会有点困难。

FYI: smooth-scrollbar/touch.js 仅供参考: smooth-scrollbar / touch.js

Here is a quick try with Jquery - works with the mousewheel; 这是Jquery的快速尝试 - 使用鼠标滚轮; the vital points: 关键点:

  • Capture the 'up' mousewheel event 捕获'向上'鼠标滚轮事件
  • Increase margin-top of element and use transition to animate 增加元素的上margin-top并使用transition到动画
  • Set max value to offset and a time to reset 将最大值设置为偏移量和重置时间

Check this snippet: 检查此代码段:

 $(function() { var more = 20; $('body').on('mousewheel', function(e) { if (e.originalEvent.wheelDelta / 120 > 0) { var st = $(window).scrollTop(); if (st == 0 && more < 160) { $('div').css({ 'margin-top': more + 'px' }); more += 20 } else { $('div').css({ 'margin-top': '0' }); more = 0; } setTimeout(function() { $('div').css({ 'margin-top': '0' }); more = 0; }, 500) } }) }); 
 body { background: #f6f6f6; height: 1000px; padding-top: 50px; } div { width: 80%; margin: 0 auto; background: white; height: 400px; transition: .3s margin linear; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div></div> 


Or JsfiddleDemo 或者JsfiddleDemo

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM