当前位置: 首页 > wzjs >正文

网站建设自学网写网页用什么语言

网站建设自学网,写网页用什么语言,手工业网站怎么做,后台去掉 wordpress新闻前几天做了一个类似qq布局的h5的聊天界面,输入框固定在最底下。初始情况会有默认的两条聊天记录,但是当点击底部的输入框时,输入框聚焦,弹起键盘,然后整个界面就被顶上去了,然后那两条默认的聊天记录也被顶…

前几天做了一个类似qq布局的h5的聊天界面,输入框固定在最底下。初始情况会有默认的两条聊天记录,但是当点击底部的输入框时,输入框聚焦,弹起键盘,然后整个界面就被顶上去了,然后那两条默认的聊天记录也被顶上去了,导致整个页面没内容了。

这张图片是初始页面
请添加图片描述
这张图片是点击输入框之后的样子,发现初始两条聊天内容被顶上去了
请添加图片描述

这里给出一个demo(如果样式有问题,请将浏览器的模拟器调到iphone 6/7/8)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport"content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no,viewport-fit=cover" /><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}html,body {width: 100%;height: 100%;overflow: hidden;background-color: pink;}p {padding-bottom: 1.875rem;}.left {text-align: left;}.right {text-align: right;color: blue;}.chatContainer {height: 100%;padding-bottom: 30px;overflow: auto;}.inputBox {display: flex;position: fixed;bottom: 0;left: 0;right: 0;height: 30px;z-index: 999;}input {flex: 1;margin-right: .5rem;}button {width: 6.25rem;height: 100%;}</style>
</head><body><div class="chatContainer"><div class="flag"></div><div class="chat"><p class="left">你好,我是XXX,一个机器人</p><p class="left">请问您需要问什么</p></div></div><div class="inputBox"><input type="text" /><button>发送</button></div><script>let oBtn = document.querySelector('button')let oChatContainer = document.querySelector('.chatContainer')let oChat = document.querySelector('.chat')let oInput = document.querySelector('input')oBtn.onmousedown = (e) => {e.preventDefault()let inputValue = oInput.valueif (!inputValue) returnlet oDiv1 = document.createElement('p')let oDiv2 = document.createElement('p')oDiv1.className = 'right'oDiv1.innerText = inputValueoDiv2.className = 'left'oDiv2.innerText = '感谢您的回复!'oChat.appendChild(oDiv1)oChat.appendChild(oDiv2)let timer = setTimeout(() => {clearTimeout(timer)oDiv2.scrollIntoView({behavior: "smooth",})}, 100)oInput.value = ''}</script>
</body></html>

感觉这个好像并没有什么问题,安卓可以正常的显示,交互。但是IOS就是不行,并且我还设置了

  .inputBox {position: fixed;bottom: 0;z-index: 999;}

让我百思不得其解,,最后发现这是IOS手机的通病,没办法,只能进行hack了。

我的最终解决思路是,既然聚焦会定顶起内容区域,那么顶起来多少,我就用空白的元素占位多少高度,这样内容就显示出来了。当手指在屏幕滑动时,再把占位块高度变为0。如果内容区域足够高了,那么就不需要占位了,因为这个时候肯定有内容区域的元素露出来了。

最终的js代码如下

insetPlaceholder(oChatContainer, oInput)
function insetPlaceholder(containerEl, inputEl) {/*** 只有苹果手机会导致输入框聚焦顶底整个内容区域,* 所有这个函数只对IOS系统进行兼容处理*/let isIos = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);if (!isIos) return/*** 这里这个是一个死的元素结构* 类似这样*  <div class="container"><div class="flag"></div><div class="content"></div></div>*  container是整体,flag是占位元素,根据情况切换高度*  content是实际的内容区域*/let oFlag = containerEl.children[0]let oContent = containerEl.children[1]let firstFocusFlagElHeight = undefined// 能够显示出内容的最小高度let showInfoMinHeight = undefinedconst onInputFocus = () => {/*** 记录第一次聚焦的时候,container这个大盒子究竟被顶起来多少,把这个值记录为flag的高度* * 如果oContent的高度大于700了,那就说明内容足够多了,不需要占位元素顶了*/if (firstFocusFlagElHeight === undefined || (oContent.offsetHeight < showInfoMinHeight)) {let timer = setTimeout(() => {clearTimeout(timer)if (firstFocusFlagElHeight === undefined) {firstFocusFlagElHeight = Math.abs(oFlag.getBoundingClientRect().top)showInfoMinHeight = firstFocusFlagElHeight + oContent.offsetHeight}oFlag.style.height = firstFocusFlagElHeight + 'px'}, 3e2)}}oInput.addEventListener('focus', onInputFocus)/*** 监听这个事件主要是为了隐藏那个占位元素* 防止用户滑动界面把占位元素露出来* 并且很奇怪,如果不这样做,输入框会滚动!并且我已经设置了固定定位!*/const onContainerElTouchstart = () => {oFlag.style.height = 0oInput.blur()}containerEl.addEventListener('touchstart', onContainerElTouchstart)
}

或者如果你的初始内容足够多,那你也不需要考虑这个问题

这里需要注意的是insetPlaceholder方法传入第一个参数是需要一个特定的html结构的,需要这样的结构

<div class="container"><div class="flag"></div><div class="content"></div>
</div>

还有两个注意点这里说一下

oDiv2.scrollIntoView({behavior: "smooth",
})

这段代码用setTimout包裹了,不然动画无法执行(IOS不支持这个方法,只有安卓可以)

  1. 这里按钮的点击是监听的mousedown事件,并不是click,主要是为了阻止按钮点击触发输入框的失焦,会导致键盘收起,影响用户体验。

文章转载自:

http://dtU0OFlX.dybth.cn
http://s16h3vB8.dybth.cn
http://9UpEf6yH.dybth.cn
http://0S2gBqvr.dybth.cn
http://11dOUWWw.dybth.cn
http://FtCqO5jS.dybth.cn
http://klUy9L2e.dybth.cn
http://DuoYpsB5.dybth.cn
http://zEUTedy3.dybth.cn
http://KdFnaks2.dybth.cn
http://qdXKfdXk.dybth.cn
http://G6MgIvhO.dybth.cn
http://EDc984Mq.dybth.cn
http://5jtjR6j4.dybth.cn
http://XLC4Zd7M.dybth.cn
http://hBKXPxEH.dybth.cn
http://3uS2jARb.dybth.cn
http://8EgsHOrk.dybth.cn
http://jntTiSKg.dybth.cn
http://s81AmNqo.dybth.cn
http://aOL1Nggp.dybth.cn
http://R3JcQF9V.dybth.cn
http://rRRtGvTL.dybth.cn
http://G7XqQhOV.dybth.cn
http://DorLs2rg.dybth.cn
http://2MtiGPEJ.dybth.cn
http://CpilkAVO.dybth.cn
http://tOQD7kTy.dybth.cn
http://COCTyfF1.dybth.cn
http://kmgn31yb.dybth.cn
http://www.dtcms.com/wzjs/680781.html

相关文章:

  • 网站制作的困难与解决方案手游制作
  • 帝国cms能建设视频网站吗网站系统建设系广告经营者
  • 房屋出租网站模板上海装修公司排行榜
  • 公司做网站的费用如何记账网站备案拍照要求
  • wordpress仿站教程+vip网络哪家公司比较好
  • 企业网站建设ppt怎样在百度上发布免费广告
  • 十大免费不收费的网站制作app的公司
  • 眉县住房和城市建设局网站广州网站优化服务商
  • 做高仿网站建设租房子的网站
  • 国外有哪些优秀的网站iis网站架设教程
  • 网站仿站是啥代运营公司介绍
  • 风景网站模版宁夏网站建设一条龙
  • 快速的网站设计制作如何建淘客网站
  • 门户网站快速制作货运app开发公司
  • 网站该怎么找到基于php的网站开发流程
  • 招聘网站开发的公司wordpress 路径标签
  • dedecms 旅游网站模板下载子网站用织梦系统
  • 做网站网站如何定位网站建设方案 评价
  • 树莓派做影视网站dw网站建设
  • 白狐网站建设电子商务专业怎么样
  • 广西网站运营美团网网站建设 费用
  • 大兴网站建设设计公司大连市平台网站
  • 推进网站集约化建设的做法网站建设控制
  • 咋么做进网站跳转加群营销网站费用
  • 网站建设自主开发的三种方式wordpress 百度mip
  • 大连做网站公司哪家好买机票便宜的网站建设
  • 游戏网站建设视频教程低价网站设计多少钱
  • 公司网站的管理和维护wordpress更换域名教程
  • 郑州营销型网站建设价格art2008cms网站开发
  • 宁波品牌网站制作哪家好长沙高端网站建设品牌