移动端touch事件实现页面弹动--小插件
动手之前的打盹
- 说实话真的是好久没有更新博客了,最近一直赶项目,身心疲惫;最关键的是晚上还要回去上一波王者,实在是忙啊!
- 这周下来,清闲了些许,或许是因为要到国庆的缘故吧,大家都显得无精打采。俗话说的好: ”身在曹营,心在汉!“。早早的就去为祖国庆生去了,哈哈。
- 是时候表演真正的技术了,那么先来一杯coffee,就是那种像屎尿混合在一起的颜色的饮料;要问什么味道,哈哈,一周没洗的脚被一双一年没洗的袜子包着,捂在密不透风的旅游鞋里,散发出来的汗液的味道。
小页面的搭建
- 搭建一个网页,注:改页面是移动端页面,请在浏览器调成移动端状态测试
- 将body设置为overflow:hidden,很奇怪吧,不是overflow:scroll 吗? 对,不是,我们是要通过touch事件来模拟滑动,然后控制translate,来使页面弹动
- body里面的内容要比body高,这样在滑动整个页面的时候就会出现滑倒顶部或底部继续滑动,页面会弹回底部或顶部,即bounce页面效果,有点像App
- 最后的最后,记得要在浏览器上调成移动端模式测试奥,touch事件只支持移动端
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
<title>还有谁</title>
</head>
<body style="height: 100%; overflow: hidden;">
<div id="main" style="height: 813px; width: 100%;background-color: #c1c1c1;">
</div>
</body>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</html>
正所谓青铜的操作,王者的思想,是时候拿一波五杀了,哈哈哈,还有谁
- 关键还是js,是吧,贝斯,架子鼓弄得再好,没鸟用,什么有用,主唱啊,哈哈哈
- 大家好,我是人见人爱,欢迎车震们来解说这一期的代码
- 话不多说,先上代码;上图不上码,菊花万人捅
var startX,//触摸时的坐标
startY,
x, //滑动的距离
y,
aboveY=0;
var dom = document.getElementById('main');
var html_h = $("html").height();
var dom_h = $("#main").height();
//touchStart事件
dom.addEventListener('touchstart',function(e){
e.preventDefault();
var touch=e.touches[0];
startY = touch.pageY;
},false);
//touchmove事件
dom.addEventListener('touchmove',function(e){
e.preventDefault();
var touch = e.touches[0];
y = touch.pageY - startY;
// console.log(endY);
$('#main').css("transform","translate(0px,"+(aboveY+y)+"px) translateZ(0px)");
$('#main').css("transition-timing-function","cubic-bezier(0.1, 0.57, 0.1, 1)");
$('#main').css("transition-duration","0ms");
},false);
//touchend事件
dom.addEventListener('touchend',function(e){
e.preventDefault();
var arr = $("#main").css("transform").split(',');
aboveY = parseInt(arr[5].substr(0,arr[5].length-1));
if(arr[5].substr(0,arr[5].length-1)>0){
$('#main').css("transform", "translate(0px, 0px) translateZ(0px)");
$('#main').css("transition-timing-function","cubic-bezier(0.1, 0.57, 0.1, 1)");
$('#main').css("transition-duration","600ms");
aboveY = 0;
} else if((html_h-dom_h)>aboveY) {
$('#main').css("transform", "translate(0px, "+(html_h-dom_h)+"px) translateZ(0px)");
$('#main').css("transition-timing-function","cubic-bezier(0.1, 0.57, 0.1, 1)");
$('#main').css("transition-duration","600ms");
aboveY = (html_h-dom_h);
}
},false);
- 那么接下来,我为大家简单的介绍一下代码的作用
- touch事件不用多逼逼,大家都懂,那么他是如何模拟滑动的呢?,没错就是
transform:translate(0px, 888px)
这个css3属性,明白了吧,通过改变这个属性,从而改变了html模块的位置 - 那么大家又想问了,这个
transition-timing-function
是干嘛用的,说白了就是个运动曲线,赛贝尔曲线,哎,懂了吧,就是规定你这个html模块如何运动的 - 时间呢?得有吧,
transition-duration
这不就来了吗?哈哈,简单吧,都是css3,社会我三哥,人丑话不多
强行插波广告,哈哈,又到了大家最喜欢的广告环节
- 下面这段代码就是监听touch事件结束后页面上被滚动模块的位置,若是在顶部或底部,便将他们来个运动,就是回到顶部或底部,这样一来,我们将页面来出去的超过窗口的部位就又弹回来了,有运动时间,还有运动曲线,不用想了,就想美女的身材一样,好看
- aboveY是干什么的,是记录上一次页面滚动的位置,便于下一次继续从上一次的位置开始滚动
- 其他的部分,我想大家仔细看看,应该就明白了,正所谓,看直播上王者,我相信,你们可以的,你看,你看,看不懂,就盯着它看,代码害羞了,你就看懂了
if(arr[5].substr(0,arr[5].length-1)>0){
$('#main').css("transform", "translate(0px, 0px) translateZ(0px)");
$('#main').css("transition-timing-function","cubic-bezier(0.1, 0.57, 0.1, 1)");
$('#main').css("transition-duration","600ms");
aboveY = 0;
} else if((html_h-dom_h)>aboveY) {
$('#main').css("transform", "translate(0px, "+(html_h-dom_h)+"px) translateZ(0px)");
$('#main').css("transition-timing-function","cubic-bezier(0.1, 0.57, 0.1, 1)");
$('#main').css("transition-duration","600ms");
aboveY = (html_h-dom_h);
}
最后的最后的最后,使劲上下拉动页面,那个灰色的模块就会出现弹动效果了(bounce页面效果),记得要在浏览器的移动端奥
移动端touch事件实现页面弹动--小插件的更多相关文章
- H5案例分享:移动端touch事件判断滑屏手势的方向
移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标 ...
- kissui.scrollanim页面滚动动画库插件
简介 kissui.scrollanim是一款实用的纯JS和CSS3页面滚动动画库插件.通过该插件可以使元素进入浏览器视口的时候,展示指定的CSS3动画效果. 下载地址及演示 在线演示 在线下载 安装 ...
- 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法
这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且to ...
- 原生js移动端touch事件实现上拉加载更多
大家都知道jQuery里没有touch事件,所以在移动端使用原生js实现上拉加载效果还是很不错的,闲话不多说,代码如下: //获取要操作的元素 var objSection = document.ge ...
- 移动端touch事件 || 上拉加载更多
前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误 ...
- 移动端 Touch 事件
在移动端页面开发时,常常会用到touch事件,比如左滑右滑的轮播等.常用的触摸事件有touchstart,touchmove,touchend. 每个事件包含下面三个用于跟踪虎摸的属性: touche ...
- 移动端 touch 事件的originalEvent
对于移动端的触摸事件,我们通过touchstart.touchmove.touchend实现,PC端一般使用mousedown.mousemove.mouseup实现. 我们获取事件坐标,原生js获取 ...
- 移动端Touch事件基础
1.三个常用的移动端事件 ontouchstart 手指按下时触发 ontouchmove 手指移动时触发 ontouchend 手动抬起时触发 注意:这些事件当作事件属性使用时,不兼容谷歌浏览器. ...
- 移动端touch事件滚动
本来想用在北京欢乐谷手机上用touch事件来模拟局部左右内容滚动里,但在touchmove上下滚动时由于禁止了默认事件而body滚动条不能滚动,虽然可以根据touchmove的坐标来判断方向,但体验效 ...
随机推荐
- STL中队列(queue)的使用方法
STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...
- javaSE基础之 ArrayList的底层简单实现
最近就是想扒一扒存在硬盘里面的学习资料(突然想到什么),把以前写过的一些东西整理一下分享出来. 这边是ArrayList 的简单实现,当然只实现了部分方法 package com.yck.collec ...
- windows平台下node,npm,gulp配置
参考文献:http://blog.csdn.net/yuanyuan214365/article/details/53749583 1.安装nodejs:nodejs nodejs安装路径随意 nod ...
- python爬虫之一---------豆瓣妹子图
#-*- coding:utf-8 -*- __author__ = "carry" import urllib import urllib2 from bs4 import Be ...
- CSS3四个自适应关键字——fill-available、max-content、min-content、fit-content
前面的话 一般地,有两种自适应:撑满空闲空间与收缩到内容尺寸.CSS3将这两种情况分别定义为'fill-availabel'和'fit-content'.除此之外 ,还新增了更细粒度的'min-con ...
- 线性表之何时使用ArrayList、LinkedList?
前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...
- IOS学习[Swift中跳转与传值]
Swift中页面跳转与传值: 1.简单方式 首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法. 1.通过在storyb ...
- List,map,Set区别
List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...
- webpack配置这一篇就够
最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...
- OSX 10.8+下开启Web 共享 的方法
MENU Home Archives About SUBSCRIBE ☰MENU OSX 10.8+ Mountain Lion 下开启 Web Sharing(Web 共享)的方法 JUL 28, ...