Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 521|回复: 0

vue 移动端/PC常见问题及解决方法

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-7-13 01:36:21 | 显示全部楼层 |阅读模式

    一、判断手机/PC浏览器语言

    navigator.language // 返回语言代码
    

      

    语言代码文档: http://www.lingoes.cn/zh/translator/langcode.htm

    二、获取滚动条位置

    // html结构

    <template lang="pug">
        div.home-box(@scroll="scorllChangeColor")
    <template> 

    // methods中声明方法

      methods: {
        scorllChangeColor(event) {
          if( this.scrollTopFlag && event.target.scrollTop > 560) {
            this.scrollTopFlag = false
            this.scrollBtmFlag = true
            document.querySelector('.home-topbar').style.backgroundColor = '#1D0A60'
          }else if(this.scrollBtmFlag && event.target.scrollTop < 560) {
            this.scrollTopFlag = true
            this.scrollBtmFlag = false
            document.querySelector('.home-topbar').style.backgroundColor = 'rgba(0, 0, 0, 0.3)'
          }
        }
    }
    

    三、回到顶部

    // html结构

    <!-- backTop 回顶部的方法 -->
    <button  class="go-top" @click="backTop">回到顶部</button>
    

      

    // 周期及方法

    // vue的两个生命钩子,这里不多解释。
    // window对象,所有浏览器都支持window对象。它表示浏览器窗口,监听滚动事件
    mounted () {
      window.addEventListener('scroll', this.scrollToTop)
    },
    destroyed () {
      window.removeEventListener('scroll', this.scrollToTop)
    },
     
     
    methods: {
      // 点击图片回到顶部方法,加计时器是为了过渡顺滑
      backTop () {
          const that = this
          let timer = setInterval(() => {
            let ispeed = Math.floor(-that.scrollTop / 5)
            document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + ispeed
            if (that.scrollTop === 0) {
              clearInterval(timer)
            }
          }, 16)
      },
     
      // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
      scrollToTop () {
        const that = this
        let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
        that.scrollTop = scrollTop
        if (that.scrollTop > 60) {
          that.btnFlag = true
        } else {
          that.btnFlag = false
        }
      }
    }

    四、弹出层遮罩滑动穿透

    1、通过vue "@touchmove.prevent"指令

     <div
          class="wechat-img"
          @click="hideWchat"
           v-if="showModal"
           @touchmove.prevent // vue中可以直接添加指令
         >
        <img
          @click="hideWchat"
           src="../assets/images/home/mp-wechat.jpg"
            alt
         />
     </div>

    2、通过遮罩的显示或隐藏设置滚动元素的overflow: hidden

    // html 结构
        <div :class="show?'home hidden':'home'">
    <style>
        .hidden {
             overflow: hidden;
             position: absolute;
             width: 100vw;
             height: 100vh;
    </style>

    五、国际化

    // 安装

    npm install vue-i18n
    # OR
    yarn add vue-i18n

    // 创建语言包文件

    // main.js

    import Vue from 'vue'
    import App from './App.vue'
    import VueI18n from 'vue-i18n'
    import router from './router'
    import store from './store'
    import { zh } from './common/lang/zh'
    import { en } from './common/lang/en'
    
    Vue.use(VueI18n) // 通过插件的形式挂载
    
    const i18n = new VueI18n({
        locale: 'zh-CN', // 语言标识
        //this.$i18n.locale // 通过切换locale的值来实现语言切换
        messages: {
            'zh-CN': zh, // 中文语言包
            'en-US': en // 英文语言包
        }
    })
    
    Vue.config.productionTip = false
    
    new Vue({
        router,
        i18n, // 挂载
        store,
        render: h => h(App)
    }).$mount('#app')

    // html 中使用

    <p class="header-img-intro">{{ $t('home.imgIntro1') }}</p>
    <p class="header-img-intro1">{{ $t('home.imgIntro2') }}</p>

    六、判断手机、ipad、电脑

    /(iphone|ipod|ipad|ipad|Android|nokia|blackberry|bada|lg|ucweb|skyfire|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|wap|mobile)/i.test(navigator.userAgent) // true->手机/ipad

    参考地址:https://www.cnblogs.com/h5c3/p/6542799.html

         https://www.jianshu.com/p/821c8a10d14f

         https://blog.csdn.net/qq_36070288/article/details/84765139

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-15 07:19 , Processed in 0.181310 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表