关于iphone 上touch事件动态改变元素位置时与touch点发生偏移的问题
2017-04-18 14:52
357 查看
写这个么个题目好像,有点晦涩。直接来张gif图就知道,主要是是当手指触摸到元素时,元素的初始位置变成了left:0, top:0;
js 设置监听事件 都是 一样的套路
在事件里添加 进行位置的动态改变,首先就需要获得手指的初始位置,手指移动的位置,手机touch 当前元素的位置;
这样写在安卓和电脑上是没问题的, 但到了水果上状况如上图,操作后,在第一次移动时,位置变成0,再次操作位置就是和手机的运动是一样的。
分析,初始化页面时,position,是读取css文件渲染的况且是百分比定位。第二次移动时,position在元素属性上
由此 最直接办法就是 给每个需要移动的 元素 用js 设置位置。
如此 当在水果上第一次触摸拖动元素时 ,位置就不会为0。
getBoundingClientRect有个尴尬的地方就是,eles 元素和父类元素 即所在分页吧,必须可见,才有值否则为0;
有需要的交流的可以加个好友
js 设置监听事件 都是 一样的套路
touch.addEventListener('touchstart', function(evtend) {}, false); touch.addEventListener('touchmove', function(evtend) {}, false); touch.addEventListener('touchend', function(evtend) {}, false);
在事件里添加 进行位置的动态改变,首先就需要获得手指的初始位置,手指移动的位置,手机touch 当前元素的位置;
var endpst = {}, //结束位置 elepst= {}, start={}; //初始位置 item.addEventListener('touchstart', function(event) { if(event.targetTouches.length > 1) return; var offset, touch = event.targetTouches[0], style = window.getComputedStyle(this, null);// 当前元素的css 样式 start = {x: touch.clientX, y: touch.clientY}; elepst = { x: parseFloat(style.getPropertyValue('left')), y: parseFloat(style.getPropertyValue('top')), }; }, false); item.addEventListener('touchmove', function(event) { if(event.targetTouches.length > 1) return; var touch = evtmv.targetTouches[0], offset = { x : touch.clientX - start.x, y : touch.clientY - start.y }; //手移动的 偏移位置 endpst['left'] = elepst.x + offset.x; endpst['top'] = .y + offset.y; this.style.left = endpst.left+ 'px'; this.style.top = endpst.top + 'px'; }, false); //移动结束 item.addEventListener('touchend', function(e) { if(e.targetTouches.length > 1) return; }, false);
这样写在安卓和电脑上是没问题的, 但到了水果上状况如上图,操作后,在第一次移动时,位置变成0,再次操作位置就是和手机的运动是一样的。
分析,初始化页面时,position,是读取css文件渲染的况且是百分比定位。第二次移动时,position在元素属性上
由此 最直接办法就是 给每个需要移动的 元素 用js 设置位置。
var ary = document.querySelectorAll(eles) for (var k = start , itm; itm = ary[k++];) { var left = itm.getBoundingClientRect().left, top = itm.getBoundingClientRect().top; itm.style.cssText = 'top:' + top + 'px;left:' + left +'px'; }
如此 当在水果上第一次触摸拖动元素时 ,位置就不会为0。
getBoundingClientRect有个尴尬的地方就是,eles 元素和父类元素 即所在分页吧,必须可见,才有值否则为0;
有需要的交流的可以加个好友
相关文章推荐
- 关于jQuery动态加载元素之后绑定事件无法触发的问题
- 开发的网站,在IE,firefox下浏览运行良好,但在Andriod, iPhone,iSO等手机平台上浏览该时位置发生偏移解决办法
- javascript获取 元素大小、位置、事件发生时的坐标
- win32窗口:关于鼠标定位位置偏移问题的原因及解决方法
- jquery动态添加元素事件失效问题解决方法
- jQuery使用on()绑定动态生成元素的事件无效的问题
- 基于jquery的关于动态创建DOM元素的问题
- 关于js动态生成元素,注册(绑定)的事件失效的解决(on)
- 关于动态加载控件 事件触发的问题
- 动态改变select元素的option时宽度发生变化解决方法
- 关于Touch事件的传递问题
- 关于Away3D4.0中Geometry无法动态赋值height、width、deep来改变几何体显示的问题
- IOS safari中,在body下动态创建元素的事件委托问题
- 基于jquery的关于动态创建DOM元素的问题
- 关于动态贴图问题不能动态通过texture改变只能重新new 新material
- js绑定事件this指向发生改变的问题解决方法
- 基于jquery的关于动态创建DOM元素的问题
- 关于动态创建DOM元素的问题
- jquery动态添加元素事件失效问题解决方法
- 关于jquery动态加载节点后阻止事件冒泡失效的问题