整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

"决胜移动端:H5页面如何一键禁用双击放大、双指缩放与整体

决胜移动端:H5页面如何一键禁用双击放大、双指缩放与整体缩放功能】

在移动互联网时代,H5页面以其跨平台兼容性和丰富的交互特性,成为众多开发者构建移动端应用的首选。然而,在实际使用过程中,用户可能会遇到双击放大、双指缩放或整体缩放等操作带来的困扰,尤其是在一些特定场景下(如游戏、阅读、绘图等),这些默认的缩放行为可能会影响用户体验。本文将深入解析如何通过CSS和JavaScript,一键禁用H5页面的双击放大、双指缩放及整体缩放功能,助您打造更为稳定、流畅的移动端交互体验。

一、理解移动端缩放机制

1. 双击放大(Double Tap Zoom)

双击放大是浏览器对移动端设备的默认响应行为,当用户快速连续点击屏幕两次时,浏览器会自动将页面内容放大到一个预设的缩放比例,以便用户查看细节。

2. 双指缩放(Pinch Zoom)

双指缩放是利用多点触控技术,通过两个手指在屏幕上做开合动作来实现页面内容的放大或缩小。这是移动设备上非常常见的交互方式,适用于查看图片、地图等需要精细操作的场景。

3. 整体缩放(Meta Viewport Scaling)

整体缩放主要由`<meta>`标签中的`viewport`属性控制,它定义了浏览器在渲染网页时应如何调整其布局和缩放。例如,设置`initial-scale=1`意味着初始缩放比例为1:1,即网页内容与设备宽度保持一致。

二、禁用双击放大

1. 使用CSS属性

css
body {
  touch-action: manipulation;
}

在CSS中,可以利用`touch-action`属性来控制元素的触摸交互行为。将其设置为`manipulation`,即可禁用双击放大:

2. 通过JavaScript阻止事件冒泡

javascript
document.addEventListener('dblclick', function(event) {
  event.preventDefault();
});

对于更复杂的应用场景,可能需要在JavaScript中处理双击事件,防止其触发浏览器的默认放大行为:

三、禁用双指缩放

javascript
let initialTouchStartY = 0;
let initialTouchStartX = 0;

document.addEventListener('touchstart', function(event) {
  if (event.touches.length > 1) {
    event.preventDefault(); // 阻止默认行为,包括双指缩放
    initialTouchStartY = event.touches[0].clientY;
    initialTouchStartX = event.touches[0].clientX;
  }
});

document.addEventListener('touchmove', function(event) {
  if (event.touches.length > 1) {
    event.preventDefault(); // 阻止默认行为,包括双指缩放
    const currentTouchY = event.touches[0].clientY;
    const currentTouchX = event.touches[0].clientX;
    const diffY = Math.abs(currentTouchY - initialTouchStartY);
    const diffX = Math.abs(currentTouchX - initialTouchStartX);

    // 如果双指滑动距离过小,可能是误触,允许正常滚动
    if (diffY < 10 && diffX < 10) return;

    // 否则,阻止所有滚动行为
    event.stopPropagation();
  }
});

document.addEventListener('touchend', function(event) {
  if (event.touches.length > 0) {
    event.preventDefault(); // 阻止默认行为,包括双指缩放
  }
});

要禁用双指缩放,通常需要借助于JavaScript监听`touchstart`、`touchmove`和`touchend`事件,并在`touchmove`事件处理器中阻止默认行为:

四、控制整体缩放

1. 设置合理的viewport meta标签

html
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

在HTML文档的`<head>`部分添加以下`<meta>`标签,确保页面初始缩放比例为1,且禁止用户手动缩放:

2. 使用CSS媒体查询优化布局

css
@media screen and (max-width: 768px) {
  /* 在小屏设备上的布局调整 */
}

@media screen and (orientation: landscape) {
  /* 横屏模式下的布局调整 */
}

结合CSS媒体查询,根据不同的设备宽度和屏幕方向动态调整布局,确保内容在各种屏幕尺寸下都能良好展示,从而降低用户主动缩放的需求:

五、实战案例:禁用缩放功能的完整H5页面示例

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <style>
    body {
      touch-action: manipulation;
    }
  </style>
  <script>
    document.addEventListener('dblclick', function(event) {
      event.preventDefault();
    });

    let initialTouchStartY = 0;
    let initialTouchStartX = 0;

    document.addEventListener('touchstart', function(event) {
      if (event.touches.length > 1) {
        event.preventDefault();
        initialTouchStartY = event.touches[0].clientY;
        initialTouchStartX = event.touches[0].clientX;
      }
    });

    document.addEventListener('touchmove', function(event) {
      if (event.touches.length > 1) {
        event.preventDefault();
        const currentTouchY = event.touches[0].clientY;
        const currentTouchX = event.touches[0].clientX;
        const diffY = Math.abs(currentTouchY - initialTouchStartY);
        const diffX = Math.abs(currentTouchX - initialTouchStartX);

        if (diffY < 10 && diffX < 10) return;

        event.stopPropagation();
      }
    });

    document.addEventListener('touchend', function(event) {
      if (event.touches.length > 0) {
        event.preventDefault();
      }
    });
  </script>
</head>
<body>
  <!-- 页面内容 -->
</body>
</html>

为了便于理解和实践,以下是一个包含了禁用双击放大、双指缩放及整体缩放功能的完整H5页面示例:

六、结语

通过以上步骤,您已经掌握了在H5页面中一键禁用双击放大、双指缩放及整体缩放功能的方法。合理运用这些技巧,不仅能提升移动端用户的浏览体验,还能避免因不必要的缩放导致的布局错乱等问题。在实际项目中,还需结合具体业务需求,灵活调整代码实现,以达到最佳效果。希望本文能为您的移动端H5开发之路提供有力支持,助您决胜移动端!


在响应式布局逐渐成为主流的今天,网页或者app的流式布局已经不算是一个新鲜的词汇了。今天我要讲的一个内容也是跟页面流式布局有关,如何让你的网页实现完美的缩放?

网页布局

我们可以很快速的写出一个响应式布局的页面,首先看一下效果图。

网页布局

其中html部分的代码如下:

html部分代码

css中的item代码为:

css代码

通过以上代码,完成上述的流式布局后,在我们改变浏览器窗口大小时,div也会随之进行缩放。

问题

But,你以为这就是我们想要的结果吗?

当然不是!在改变浏览器窗口大小时,我们发现虽然div的宽度是进行了缩放,但是高度却没变,因此div的宽高比并未保持原始比例,我们可以看下以下的效果。

缩放后宽高比

从上图中可以很容易看出,缩放后的div宽高比比之前小很多,这并不是我们想要的结果。

我们需要达到的效果是在改变浏览器窗口大小时,div也会随之进行等比例的缩放。

实现办法

首先,可以使用Javascript代码去实现,这是没有问题的。但是绑定Javascript的onresize事件,在拖拽时可能会出卡顿现象,体验不是很好。

接下来我们通过CSS来实现以上的效果。

使用的核心属性是我们平时并不太注意的padding-bottom。

padding-bottom有一个很容易让人忽略的特性是,当取值为百分比形式时,其百分比的基数是父元素的宽度,而不是高度。

因此我们可以在不用给父元素设置高度的时候,就可以通过padding-bottom属性确定当前元素的高度。我们的做法如下。

  1. 将元素的height属性设为0,通过padding-bottom属性确定元素高度。

  2. 设置合理的padding-bottom值,例如上述的例子中,在宽度为21%时,如果需要高度是宽度的1.62倍,我们可以将padding-bottom取值为34%

修改后的CSS代码如下。

修改后的CSS

修改后,我们再次调整浏览器窗口的大小,就会发现div是等比例的进行缩放,完美达到了我们的要求。

修改后等比例缩放

疑问

在这里,可能会有人有疑问如果设置overflow:hidden;那么里面的文字会不会因为超过height,就会被隐藏了?

答案是不会的,根据CSS2.1的规范,overflow只会对处于padding外面的内容生效,即只有超出了 padding区域的内容才会被overflow属性隐藏掉。而在设置padding-bottom后,实际已经决定了元素的height属性,因此overflow:hidden;不会生效。

总结

今天这篇文章主要讲解了利用CSS完成页面等比例缩放的最简单方式,你学会了吗?

TML是谁发明的?

1.HTML的全称是什么?

超文本标记语言(Hyper Text Markup Language),是一种用于创建网页的标准标记语言。

2.谁发明的?

是由Tim Berners-Lee发明的。

HTML 起手应该写什么?

<!DOCTYPE html>
  <!--文档类型为html 此行必须为第一行 前面空一行也会报错-->
  <html lang="en">
    <!--html标签 en是英语 zh-CN是中文-->
    
    <head>
                 <meta charset="UTF-8">
                   <!--文件的字符编码-->
                   <meta name="viewport" content="width=device-width, initial-scale=1.0">
                     <!--content里的内容代表禁止缩放,兼容手机-->
                     <meta http-equiv="X-UA-Compatible" content="ie=edge">
                       <!--content里的内容表示让ie使用最新的内容-->
                       <title>Document</title>
    </head>

常用的表章节的标签有哪些,分别是什么意思?

  1. h1-h6 标题
  2. section 章节
  3. article 文章
  4. p 段落
  5. header 头部
  6. footer 脚部
  7. main 主要内容
  8. aside 旁支内容
  9. div 划分,表示一个区块

全局属性有哪些?

  1. class 用来对网页元素进行分类。如果不同元素的class属性值相同,就表示它们是一类的。
  2. contentteditable HTML 网页的内容默认是用户不能编辑,contenteditable属性允许用户修改内容。
  3. hidden hidden是一个布尔属性,表示当前的网页元素不再跟页面相关,因此浏览器不会渲染这个元素,所以就不会在网页中看到它。
  4. id id属性是元素在网页内的唯一标识符
  5. style 用来指定当前元素的 CSS 样式
  6. tabindex 页通常使用鼠标操作,但是某些情况下,用户可能希望使用键盘,或者只有键盘可以用。因此,浏览器允许使用 Tab 键,遍历网页元素。也就是说,只要不停地按下按钮 Tab 键,网页的焦点就会从一个元素转移到另一个元素,选定焦点元素以后,就可以进行下一步操作,比如按下回车键访问某个链接,或者直接在某个输入框输入文字。
  7. title 用来为元素添加附加说明。大多数浏览器中,鼠标悬浮在元素上面时,会将title属性值作为浮动提示,显示出来。

常用的内容标签有哪些,分别是什么意思?

  1. ol+li 有序列表
  2. ul+li 无序列表
  3. dl+dt+dd 自定义的列表
  4. pre 显示文本中的空白符号
  5. hr 分割线
  6. br 换行
  7. a 链接通过<a>标签表示,用户点击后,浏览器会跳转到指定的网址。
  8. em <em>是一个行内标签,表示强调(emphasize),浏览器会以斜体显示它包含的内容。
  9. strong <strong>是一个行内元素,表示它包含的内容具有很强的重要性,需要引起注意。浏览器会以粗体显示内容。
  10. code 呈现一段计算机的代码,各类语言。
  11. quote 行内的引用
  12. blockquote 块的引用