Marcus
Marcus

Reputation: 152

position: -webkit-sticky not working on safari

I'm building a page that has a sticky section at the top of the page, I can't get the postion:sticky to work on safari I've tried position: -webkit-sticky; also, but with no success.

What am I doing wrong?

link to live version: http://oxfordlocks.co.uk/Explore/beast.html

// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option

// pause video on load
vid.pause();

// pause video on document scroll (stops autoplay once scroll started)
window.onscroll = function(){
    vid.pause();
};

// refresh video frames on interval for smoother playback
// pageXOffset/x will determine how fast a scroll will scrub through video
// the lower the number, the more frames will be covered in a scroll
setInterval(function(){
    vid.currentTime = window.pageYOffset/100;
}, 100);

// alternate between two specific locations on page with keystrokes 'f' and 'j'
document.body.onkeydown = function(event){
  event = event || window.event;
  var keycode = event.charCode || event.keyCode;
    if(keycode === 70){
        window.scrollTo(0,0);
    }
    else if (keycode === 74){
        window.scrollTo(0,800);
    }
}
.box{
text-align: center;
position: relative;
width: 100%;
margin-top: 100px;
margin-left: 50px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center; 
}
#set-height {
  display: block;
  height: 250vh;
  position: relative;
  padding-bottom: 50px;
}
#v0 {
  position: -webkit-sticky;
  position: sticky;
  top:200px;
  width: 90%;
background: red;


}

.intro{
  width: 60vw;
  min-width: 1200px;
  height: auto;
  margin: auto;
  display: flex;
  flex-direction: column;
  text-align: left;
  margin-top: 100px;
  margin-bottom: 100px;
}
.intro h3{
  width: 75%;
  margin-bottom:100px; 
}
.image-row{
  width: 100%;
  height: auto;
  max-height: 750px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  margin-bottom: 100px;
}
.intro-image{
  width: 100%;
  height: auto;
  margin-top: 50px;  
  object-fit: contain;
}
.intro-image.split{
width: 47.5%;
margin-top: 50px;
}
     
<div class="box">
  <div id="set-height">
    <p id="time"></p>
    <video id="v0" tabindex="0" autobuffer="autobuffer" preload="preload">
      <source type="video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" src="../Video/Beast-scroll-vid.mp4"></source> 
      <!-- <source type="video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" src="Beast_Drop_1.mp4"></source> -->
        <p>Sorry, your browser does not support the &lt;video&gt; element.</p>
    </video>
  </div>
</div>
<div class="intro">
  <h3>The Beast is the ultimate diamond approved security solution for keeping your pride and joy secure</h3>
  <div class="image-row">
      <img src="../Images/Background-Images/beast-set-explosion.jpg" alt="" class="intro-image">
  </div>
</div>

Upvotes: 0

Views: 374

Answers (1)

Kristaps
Kristaps

Reputation: 305

It looks like <p id="time"></p> was interfering with position: -webkit-sticky;

// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option

// pause video on load
vid.pause();

// pause video on document scroll (stops autoplay once scroll started)
window.onscroll = function(){
    vid.pause();
};

// refresh video frames on interval for smoother playback
// pageXOffset/x will determine how fast a scroll will scrub through video
// the lower the number, the more frames will be covered in a scroll
setInterval(function(){
    vid.currentTime = window.pageYOffset/100;
}, 100);

// alternate between two specific locations on page with keystrokes 'f' and 'j'
document.body.onkeydown = function(event){
  event = event || window.event;
  var keycode = event.charCode || event.keyCode;
    if(keycode === 70){
        window.scrollTo(0,0);
    }
    else if (keycode === 74){
        window.scrollTo(0,800);
    }
}
.box{
text-align: center;
position: relative;
width: 100%;
margin-top: 100px;
margin-left: 50px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center; 
}
#set-height {
  display: block;
  height: 250vh;
  position: relative;
  padding-bottom: 50px;
}
#v0 {
  position: -webkit-sticky;
  position: sticky;
  top:200px;
  width: 90%;
background: red;


}

.intro{
  width: 60vw;
  min-width: 1200px;
  height: auto;
  margin: auto;
  display: flex;
  flex-direction: column;
  text-align: left;
  margin-top: 100px;
  margin-bottom: 100px;
}
.intro h3{
  width: 75%;
  margin-bottom:100px; 
}
.image-row{
  width: 100%;
  height: auto;
  max-height: 750px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  margin-bottom: 100px;
}
.intro-image{
  width: 100%;
  height: auto;
  margin-top: 50px;  
  object-fit: contain;
}
.intro-image.split{
width: 47.5%;
margin-top: 50px;
}
<div class="box">
  <div id="set-height">
    <video id="v0" tabindex="0" autobuffer="autobuffer" preload="preload">
      <source type="video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" src="../Video/Beast-scroll-vid.mp4"></source> 
      <!-- <source type="video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" src="Beast_Drop_1.mp4"></source> -->
        <p>Sorry, your browser does not support the &lt;video&gt; element.</p>
    </video>
  </div>
</div>
<div class="intro">
  <h3>The Beast is the ultimate diamond approved security solution for keeping your pride and joy secure</h3>
  <div class="image-row">
      <img src="../Images/Background-Images/beast-set-explosion.jpg" alt="" class="intro-image">
  </div>
</div>

Upvotes: 1

Related Questions