移动端的几个面试小问题
2018-06-24 00:08:52来源:未知 阅读 ()
<body>
<div class="page">
<div id="box"></div>
</div>
<script type="text/javascript">
var page = document.querySelector('.page');
page.addEventListener('touchstart', function(e) {
e.preventDefault();
});
var lastPoint = {};
box.addEventListener('touchstart', function(e) {
lastPoint = {
x:e.changedTouches[0].pageX,
y:e.changedTouches[0].pageY
}
this.innerHTML = "start";
this.innerHTML += "<br/>x:"+e.changedTouches[0].pageX;
this.innerHTML += "<br/>y:"+e.changedTouches[0].pageY;
});
box.addEventListener('touchmove', function(e) {
if(e.changedTouches[0].pageX == lastPoint.x
&&e.changedTouches[0].pageY == lastPoint.Y){
return;
}
this.innerHTML += "<br/>move";
this.innerHTML = "x:"+e.changedTouches[0].pageX;
this.innerHTML += "<br/>y:"+e.changedTouches[0].pageY;
lastPoint = {
x:e.changedTouches[0].pageX,
y:e.changedTouches[0].pageY
}
});
</script>
<div class="page">
<div class="info"></div>
<input type="text" class="text" name="">
</div>
<script type="text/javascript" src="js/mTween.js"></script>
<script type="text/javascript">
(function(){
var page = document.querySelector('.page');
var text = document.querySelector('.text');
var info = document.querySelector('.info');
var old = 0;
css(page,"translateY",0);
/*
移动端输入框被遮挡的问题
1) 在软件盘弹出之后(在focus中加个延迟时间),获取input的坐标
2) 判断input是否遮挡
1. 判断 input 是否在 可视区的高度以下
3) 如果被遮挡了 就向上移动整个页面
1. 用被软件盘遮挡的距离
*/
text.addEventListener('focus', function(e) {
setTimeout(function(){
//延迟一段时间之后,才可以获取到软键盘弹出之后的坐标
var rect = text.getBoundingClientRect();
var h = document.documentElement.clientHeight;
old = css(page,"translateY");
if(rect.bottom > h){
//info.innerHTML = "被遮挡了";
var dis = rect.bottom - h;
css(page,"translateY", old - dis);
}
},1000);
});
text.addEventListener('blur', function(e) {
old = css(page,"translateY",old);
});
})();
</script>
<body> <input id="text" type="text" name=""> <div id="info"></div> <script type="text/javascript"> (function(){ var text = document.querySelector('#text'); var info = document.querySelector('#info'); text.onfocus = function(){ //软键盘的弹出 会影响窗口的大小发生改变 // 展开是 改变一次,收缩起来又改变一次 window.addEventListener('resize', toResize); }; function toResize(){ window.removeEventListener('resize', toResize); window.addEventListener('resize', toBlur); } function toBlur(){ window.removeEventListener('resize', toBlur); text.blur(); } })(); </script>
document.addEventListener('touchstart', function(e) {
e.preventDefault();
});
/*
init:{
el: 元素,
start:fn,
change:fn,
end:fn
}
*/
(function(){
var box = document.querySelector('#box');
var startDeg = 0;
var startScale = 0;
css(box,"rotate",0);
css(box,"scale",100);
gesture({
el:box,
start: function(e){
startScale = css(box,"scale")/100;
startDeg = css(box,"rotate");
this.style.background = "blue";
},
change: function(e){
css(this,"scale",(e.scale * startScale)*100);
this.innerHTML = e.rotation;
css(box,"rotate",e.rotation + startDeg);
},
end: function(e){
this.style.background = "red";
}
});
})();
function gesture(init){
var el = init.el;
var isGesture = false;
var startDis = 0;
var startDeg = 0;
el.addEventListener('touchstart', function(e) {
if(e.touches.length >= 2){
startDis = getDis(e.touches[0],e.touches[1]);
startDeg = getDeg(e.touches[0],e.touches[1]);
isGesture = true;
init.start&&init.start.call(el,e);
}
});
el.addEventListener('touchmove', function(e) {
if(isGesture&&e.touches.length >= 2){
isGesture = true;
var nowDis = getDis(e.touches[0],e.touches[1]);
var nowDeg = getDeg(e.touches[0],e.touches[1]);
e.scale = nowDis/startDis;//缩放值
e.rotation = nowDeg - startDeg;
init.change&&init.change.call(el,e);
}
});
el.addEventListener('touchend', function(e) {
if(isGesture){
init.end&&init.end.call(el,e);
}
isGesture = false;
});
}
function getDis(Point,Point2){
return Math.sqrt((Point.pageX - Point2.pageX)*(Point.pageX - Point2.pageX) + (Point.pageY - Point2.pageY)*(Point.pageY - Point2.pageY));
}
function getDeg(Point,Point2){
var y = Point.pageY - Point2.pageY;
var x = Point.pageX - Point2.pageX;
return Math.atan2(y,x)/Math.PI*180;
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- js判断客户端是iOS还是Android等移动终端的方法 2020-02-25
- 鼠标滚轮控制网页横向移动实现思路 2020-02-20
- 鼠标拖拽移动子窗体的JS实现 2020-02-20
- 高效的获取当前元素是父元素的第几个子元素 2020-02-15
- js常见面试题 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
