vue 锚点跳转,适用移动端和web端

分3步,

第一步,创建个 锚点组件,文件名indexData.js,TopicBg1之类名字的需要和页面id对应上,在后面代码可以看到

import Vue from 'vue'
const vm = new Vue()

const dialog = (text) => {
  vm.$dialog.alert({
    title: '温馨提示',
    message: text
  })
}
// 锚点跳转
const goAnchor = (selector) => {
  document.querySelector(selector).scrollIntoView({
    // behavior: 'smooth', // 加这个动画在网页上瞄点跳转有问题
    block: 'start'
  })
}

export const verificationForn = (form) => {
  if (form.phone1 === '') {
    dialog('第1道题未回答')
    goAnchor('#TopicBg1')
    return false
  }
  if (form.phone2 === '') {
    dialog('第2道题未回答')
    goAnchor('#TopicBg2')
    return false
  }
  if (form.phone3 === '') {
    dialog('第3道题未回答')
    goAnchor('#TopicBg3')
    return false
  }
  if (form.phone4 === '') {
    dialog('第4道题未回答')
    goAnchor('#TopicBg4')
    return false
  }
  if (form.phone5 === '') {
    dialog('第5道题未回答')
    goAnchor('#TopicBg5')
    return false
  }
  if (form.phone6 === '') {
    dialog('第6道题未回答')
    goAnchor('#TopicBg6')
    return false
  }
  if (form.phone7 === '') {
    dialog('第7道题未回答')
    goAnchor('#TopicBg7')
    return false
  }
  return true
}

第二步,因为是一块块白色的样式,所以又封装了一个组件,用做样式展示,文件名goToHome.vue

<template>
  <div>
    <div class="box">
      <div class="title">{{title}}</div>
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {}
  },
  props: {
    title: {
      default: ''
    }
  }
}
</script>

<style lang="less" scoped>
.box {
  background: #fff;
  padding: 20px;
  margin: 20px;
  box-sizing: border-box;
  border-radius: 4px;
  .title {
    font-weight: bold;
  }
}
</style>

第三步,页面

<template>
  <div>
    <van-form>
      <GoToHome title="学不会" id="TopicBg1">
        <van-field v-model="form.phone1" label="1.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会2" id="TopicBg2">
        <van-field v-model="form.phone2" label="2.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会3" id="TopicBg3">
        <van-field v-model="form.phone3" label="3.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会4" id="TopicBg4">
        <van-field v-model="form.phone4" label="4.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会5" id="TopicBg5">
        <van-field v-model="form.phone5" label="5.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会6" id="TopicBg6">
        <van-field v-model="form.phone6" label="6.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
      <GoToHome title="学不会7" id="TopicBg7">
        <van-field v-model="form.phone7" label="7.紧急联系人手机号" type="digit" placeholder="请输入" maxlength="11" label-width="180px" input-align="right" />
      </GoToHome>
    </van-form>
    <van-button type="primary" @click="onSubmit()">提交</van-button>

  </div>
</template>

<script>
import GoToHome from './goToHome.vue'
import { verificationForn } from './indexData'
export default {
  data () {
    return {
      form: {
        phone1: '',
        phone2: '',
        phone3: '',
        phone4: '',
        phone5: '',
        phone6: '',
        phone7: ''
      }
    }
  },
  methods: {
    onSubmit () {
      if (verificationForn(this.form)) {
        console.log(1111)
      }
    }
  },
  components: {
    GoToHome
  }
}
</script>

<style lang="less" scoped>
/deep/ .van-cell {
  border: 1px solid black;
  border-radius: 4px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不会•

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值