Vue之键盘事件

1.使用keydown触发事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(){
                        alert(1);
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keydown="show">
    </div>
</body>
</html>

描述:

按下键盘触发show方法,弹出框1.

结果:


2.按下键盘弹出事件的键码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(ev){
                        alert(ev.keyCode);
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keydown="show($event)">
    </div>
</body>
</html>


3.keyup事件


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(ev){
                        alert(ev.keyCode);
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keyup="show($event)">
    </div>
</body>
</html>

4.Vue中在键盘事件后面添加键码值就可以说明是按下了哪个键

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>智能社——http://www.zhinengshe.com</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(){
                        alert('您按回车了');
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keyup.13="show()">
    </div>
</body>
</html>



















4.使用键名enter

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(){
                        alert('您按回车了');
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keyup.enter="show()">
    </div>
</body>
</html>
5.使用键名left

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <style>

    </style>
    <script src="vue.js"></script>
    <script>
        window.onload=function(){
            new Vue({
                el:'#box',
                data:{

                },
                methods:{
                    show:function(){
                        alert(1);
                    }
                }
            });
        };
    </script>
</head>
<body>
    <div id="box">
        <input type="text" @keyup.left="show()">
    </div>
</body>
</html>





### Vue 项目移动端兼容性问题解决方案 #### 使用 Viewport Meta 标签设置视口宽度 为了确保页面在移动设备上能够正确缩放并显示,需在 HTML 文件头部加入 viewport meta 标签。这一步骤能有效防止因默认缩放比例不一致而导致的内容错位或裁剪现象。 ```html <meta name="viewport" content="width=device-width, initial-scale=1"> ``` 此标签的作用在于告知浏览器按照设备的实际分辨率来渲染网页,并保持初始缩放级别为 100%[^1]。 #### 实施 REM 布局单位配合动态基底字体大小 采用 rem 单位作为 CSS 中的主要度量标准可以实现更灵活的布局适应不同屏幕尺寸的需求。通过 JavaScript 动态计算根元素 (`<html>`) 的 `font-size` 属性值,使得整个应用可以根据用户的设备特性自动调整文字和其他组件的比例关系。 ```javascript function setRemUnit() { const baseSize = 16; // 设定基础字号 document.documentElement.style.fontSize = `${baseSize}px`; } setRemUnit(); window.addEventListener('resize', setRemUnit); ``` 这种方法不仅提高了视觉一致性,而且简化了样式维护工作流程[^2]。 #### 利用 PostCSS 插件 px-to-viewport 转换像素单位至 vw/vh 对于那些已经大量使用固定 px 数值定义样式的旧有项目来说,直接修改源码可能耗时费力。此时可借助于 PostCSS 生态中的插件工具——px-to-viewport 来批量处理现有代码库内的静态长度声明,将其转化为更具弹性的视窗相对单位 (vw 或 vh),从而达到良好的跨屏表现效果。 安装依赖包: ```bash npm install postcss-pxtoviewport --save-dev ``` 配置 webpack 构建链路以启用该功能: ```javascript const pxtoviewport = require('postcss-pxtoviewport'); module.exports = { css: { loaderOptions: { postcss: { plugins: [ pxtoviewport({ unitToConvert: 'px', viewportWidth: 750, minPixelValue: 1 }) ] } } } }; ``` 上述方法利用了 vw 和 vh 这样的百分比性质单位,实现了更加直观易懂的空间分配机制;同时减少了针对特定平台定制化编码的工作负担[^3]。 #### 应对特殊场景下的兼容性考量 除了以上通用措施外,还需注意某些特殊情况可能会引发额外的问题,比如 iOS Safari 浏览器底部导航栏遮挡输入框的情况。对此类细节应采取针对性优化手段加以规避,如监听键盘事件改变 body padding-bottom 等方式缓解此类冲突带来的不便影响[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值