javascript - 滚动时使 CTA 按钮粘在页面底部

标签 javascript html css

我想制作一个 CTA 按钮,在页面滚动到一定程度后粘在页面底部。请看下图:

CTA button interaction

规则如下:

  1. 加载时,它应该位于 CTA 按钮的原始位置。
  2. 滚动页面时,CTA 按钮将随之滚动。
  3. 当 CTA 按钮到达窗口顶部时,该按钮将移动到右下角并保持粘性。

任何关于这种交互的 codepen、jsfiddle 或网站引用资料都将不胜感激。

最佳答案

有多种方法可以做到这一点,比如使用插件或使用简单的 CSS 和 JavaScript(下面的示例)。如果您正在寻找滚动按钮的动画,您可以使用动画代码在 CSS 中进行一些调整,或者我猜一些插件已经在这样做了。

window.onscroll = function() {myFunction()};

var btn = document.getElementById("floatBtn");
var sticky = btn.offsetTop;

function myFunction() {
  if (window.pageYOffset >= sticky) {
    btn.classList.add("sticky")
  } else {
    btn.classList.remove("sticky");
  }
}
body {
  margin: 0;
  font-size: 28px;
  font-family: Arial, Helvetica, sans-serif;
}

.header {
  background-color: #f1f1f1;
  padding: 30px;
  text-align: center;
}



.content {
  padding: 16px;
}

.keka {
   width: 100%;
   text-align: center;
}

#floatBtn {
  background: #004567;
  color: white;
  padding: 10px 30px;
  font-size: 18px;
  display: inline-block;
}

.sticky {
  position: fixed;
  bottom: 0;
  right: 20px;
}

.sticky + .content {
  padding-top: 60px;
}
.content{
	height: 1900px
}
<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
        </style>
    </head>
    <body>
        <div class="header">
            <h2>Header of the page</h2>
            <p>Some content</p>
        </div>
        <div class="keka">
            <button id="floatBtn">Floating button</button>
        </div>
        <div class="content">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit amet ex eu nulla interdum fermentum a at est. Vestibulum vehicula augue et nisl porta, at pretium leo consequat. Suspendisse sit amet semper nisi. In hac habitasse platea dictumst. In vehicula elit ut efficitur mollis. Nam vehicula pulvinar pulvinar. Curabitur neque purus, placerat eget nulla iaculis, tincidunt euismod lectus. Praesent facilisis at sem sit amet sagittis. Cras sagittis mi vel ornare convallis. Morbi tempus tempus lacus, eget lacinia magna porttitor non. Praesent tellus quam, molestie tincidunt libero sit amet, luctus viverra velit. Etiam vestibulum aliquam posuere. Praesent a dapibus sem. Sed cursus mi sit amet nisl maximus, eget varius lectus consectetur. Mauris molestie ac mi non malesuada. Proin faucibus sem vitae ex blandit tempor. Donec ut diam in tellus malesuada lacinia maximus non arcu. Proin blandit nisl at lacus feugiat, et auctor lectus viverra. Donec convallis eleifend ligula sagittis viverra. Vivamus mattis, felis et finibus maximus, diam felis vestibulum odio, eget efficitur tellus magna nec ante. Sed porta elit commodo nisi efficitur, in egestas nibh maximus. Integer nec leo ac ligula semper finibus at rhoncus felis. In pellentesque tincidunt pretium. Ut imperdiet eu nisi quis molestie. Cras lectus turpis, aliquam ut egestas ac, condimentum quis sem. In nec lorem dolor. Fusce non velit nec purus aliquet ultricies porttitor at metus. Donec et libero id nunc viverra dictum vel et sem. Integer tellus ligula, posuere quis dignissim sit amet, suscipit sit amet arcu. Vestibulum nec sodales magna, vitae varius justo. Ut ut felis a odio gravida malesuada eu ut lectus. Suspendisse quis nisl vel sem cursus luctus ac in nibh. Praesent at velit ac dolor convallis condimentum. Maecenas ac sagittis odio. In luctus eros sit amet accumsan maximus. Integer non dictum magna, at viverra urna. Mauris lacinia sodales nibh in scelerisque. Ut viverra ante ut nunc commodo, eu varius ipsum rutrum. Morbi dictum sodales dignissim. In eu finibus arcu. In consectetur eleifend libero. Aliquam purus felis, faucibus et rutrum non, consequat at metus. Cras ultricies metus eget rhoncus pulvinar. Quisque hendrerit at lectus fringilla aliquam. Sed viverra tellus tellus, eget fermentum mi ultrices in. Cras auctor, tortor quis eleifend aliquet, dui orci volutpat erat, quis sagittis nisl nisi at lacus. Suspendisse non condimentum orci. Quisque in elit mi. Praesent malesuada nibh a sapien fermentum vehicula. In in felis nibh. Nunc vitae turpis et est aliquet tempor vulputate volutpat neque. Vestibulum ut sapien sit amet diam sodales convallis sit amet euismod urna. In vehicula fermentum est, non porttitor risus pellentesque quis. Fusce condimentum mauris ut felis fringilla maximus. Nullam pharetra nisi nec enim sodales tincidunt. Morbi imperdiet felis eget lacus sagittis ornare. Donec euismod metus at erat luctus, non ullamcorper nunc ultricies. Sed sit amet vestibulum urna, et faucibus felis. Curabitur non mollis arcu, ut rhoncus leo. Integer sagittis iaculis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
        </div>
    </body>
</html>

关于javascript - 滚动时使 CTA 按钮粘在页面底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017606/

相关文章:

html - 文字装饰 : none on anchor tag is not working

javascript - 在 jsp 中的 jquery 即时过滤器后,Html 选择不更改单击选项

html - 用于混淆 html 和 css 的工具

javascript - NodeJS + Request - 请求网站时访问被拒绝

php - 将数组从 php 传递到 javascript

Javascript日期解析为什么

javascript - 将 Vue.js 混合到现有的 SSR 网站中?

javascript - 电话号码输入 - 当前已满时专注于下一个输入

php - echo 背景图像内联样式不显示

jquery - CSS Body 不可滚动?