vueスクロールテスト

by dxokoya

HTML

<script src="https://cdn.jsdelivr.net/npm/vue-scrollto"></script>
<div id="app">
  <div class="button-wrap">
    <a class="button" @click="foo()">safari対応</a>
    <a class="button" @click="bar()">safari非対応</a>
  </div>
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <p id="message">message</p>
</div>

SCSS

.button-wrap {
  display: flex;
  gap: 10px;
}
.button {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 10px;
  width: 100px;
  height: 30px;
  background: #ccc;
}
ul {
  padding: 0;
  li {
    height: 200px;
    width: 100%;
    list-style: none;
    &:nth-of-type(even) {
      background: #ccc;
    }
  }
}

Vue

new Vue({
  el: '#app',
  data: {
  },
  methods: {
  	foo() {
    	alert("safariでも滑らかに動きます");
    	this.$nextTick(() => this.safariWork());
    },
    bar() {
    	alert("safariでは滑らかに動きません");
    	this.$nextTick(() => this.safariNotWork());
    },
	  safariWork() {
      this.$scrollTo('#message', 700, { easing: 'ease-out' });
    },
    safariNotWork() {
      const element = document.getElementById('message');
    	element.scrollIntoView({
        behavior: "smooth"
      });
    }
  }
})