说在开头

最近移动端做了一个手指左右滑动切换内容的效果demo;

为了表示我的无私,决定分享给诸位;(详细代码见附件)

正文

先上html代码html>

穿衣助理

完成

整个页面ul部分是需要切换的部分具体内容有js拼接而成

css代码如下:(这里直接贴上了less编译之后)body,div,ul{margin: 0px;padding: 0px;}

.m-shape{box-sizing: border-box;}

.m-shape .cont{  overflow: hidden;box-sizing: border-box;

}

.j-cont{  margin: 0 auto;

width: 100%;}

.m-shape .cont ul {

width: 1000%;

position: relative;

margin: 0 7%;

overflow: hidden;

}

.m-shape .cont ul li {

display: inline-block;

float: left;

width: 8%;

padding: 0 0.3%;

overflow: hidden;

box-sizing: content-box;

}

.m-shape .cont ul li .tishi {

position: absolute;

border-radius: 50%;

background: url(../p_w_picpaths/Assist_icon.png) no-repeat;

background-size: 30px 30px;

width: 30px;

height: 30px;

right: 10px;

top: 10px;

}

.m-shape .cont ul li .title {

height: 40px;

line-height: 40px;

text-align: center;

}

.m-shape .cont ul li .cont {

height: 77%;

text-align: center;

}

.m-shape .cont ul li .cont .img {

height: 100%;

text-align: center;

}

.m-shape .cont ul li .cont .img img {

height: 100%;

min-height: 100%;

max-height: 100%;

}

.m-shape .cont ul li .cont p {

text-align: center;

line-height: 40px;

}

.m-shape .cont ul li .msg {

position: absolute;

top: 100%;

left: 10%;

background: rgba(0, 0, 0, 0.5);

color: #fff;

line-height: 30px;

padding: 10px;

width: 80%;

border-radius: 4px;

}

.m-shape .cont ul li .j-conts_item {

background: #9DE0FF;

border-radius: 6px;

position: relative;

}

.m-shape .but_cont {

text-align: center;

padding: 20px 0;

}

.m-shape .but_cont .but {

background: #e9494b;

display: inline-block;

height: 30px;

line-height: 30px;

width: 30%;

border-radius: 15px;

color: #fff;

}

.title{

text-align: center;

height: 40px;

line-height: 40px;

}

上面代码有一个地方要说明一下:

j-cont的大小为保证自适应其大小与手机屏幕一致(通过js实现,详情见后面js)

而后ul的width设置为1000%;即屏幕宽度的10倍;

li的关键css如下:width: 8%;

padding: 0 0.3%;

overflow: hidden;

box-sizing: content-box;

所以其padding+width = 86%的j-cont,即屏幕宽度的86%;

在执行滚动时我也是词义移动86%;但是存在一问题如下:

第一张图片左边没有图片;但是必须预留这个位置,不然第一张位置这样的,后面切换也会有错位:

所以给ul设置marin:0% 7%;保证首次位置正确,后面每次切换位置也正确。

为了保证所以尺寸的智能设备自由伸缩,写了一个方法初始化容器的大小://初始化容器

var html_cont_initialization = function () {

//初始化容器

$(".j-cont").css({

"height": $(window).height() + "px",

"min-height": $(window).height() + "px"

});

//初始化内容容器

$(".j-conts_item").css({

"height": $(window).height() - 110 + "px",

"min-height": $(window).height() - 110 + "px",

"max-height": $(window).height() - 110 + "px"

});

}

其中110px为头部title,以及按钮所在行即:$(".title"),$(".but_cont")高度之和。

还有一段代码,用来load内容模板(这个地方,现在是假数据)var sex_initialization = function () {

var html = "";

for (var i = 0; i

html += '

\

\

您的体型是?'+ i + '

\

\\

A型

\

\

';

}

$(".m-shape ul").append(html);

html_cont_initialization();

}

滑动代码如下://触屏左右切换体型效果

function switchShape() {

var startX, startY, endX, endY;

var isMove = false;//触摸:start,end操作之间是否有move

var isSwitching = false;//是否正在执行动画

var curIndex = 0;

var MaxLi = $(".m-shape ul li").length - 1;

$("body").on("touchmove", ".m-shape ul", touchMoveHandler);

$("body").on("touchstart", ".m-shape ul", touchStartHandler);

$("body").on("touchend", ".m-shape ul", touchEndHandler);

//触屏左右切换体型效果

function touchStartHandler(event) {

event.preventDefault();

var touch = event.touches[0];

startY = touch.pageY;

startX = touch.pageX;

}

function touchMoveHandler(event) {

event.preventDefault();

var touch = event.touches[0];

endX = touch.pageX;

isMove = true;

}

function touchEndHandler(event) {

event.preventDefault();

if (!isMove || isSwitching) {

return;

}

var w = 86;

var curLeft = curIndex ? -curIndex * w : 0;

var dirX = 1;//滑动方向

if (Math.abs(startX - endX) > 50) {//滑动间距大于50

if (startX - endX > 0) {

if (curIndex === MaxLi) {//当前是最后一个

return;

}

curIndex++;

} else {

if (0 === curIndex) {//当前是第一个

return;

}

dirX = -1;

curIndex--;

}

}

moveTo($(this), "left", curLeft, -curIndex * w, 43, dirX);

isMove = false;

}

//动画函数

//params:对象,css属性,开始,结束,50ms移动距离,方向1←,-1右

function moveTo($obj, objProp, start, end, spacing, direction) {

var temp = start;

isSwitching = true;

var moveTimer = setInterval(function () {

if ((1 === direction && temp - end <= 0) || (-1 === direction && temp - end >= 0)) {

clearInterval(moveTimer);

isSwitching = false;

return;

}

temp = temp - spacing * direction;

$obj.css(objProp, temp + "%");

}, 200);

}

}

switchShape();

上面代码有3点需要注意:每次滑动应包括三个动作touch start,move,end缺一不可;因为触屏点击也会触发start,end;

新增isMove状态,每次move为true;end后为false;保证三个动作都触发才执行滑动。

具体滑动的距离,一般来讲30-50直接都可以;

如果当前正在执行动画,那么在此滑动时,其实应该忽略;即滑动动画执行完毕后,再执行下一次。

说在最后

本人移动端玩的少,所以考虑难免不周,多多指教!

手机版html页面左右滑动切换页面,移动端手指左右滑动切换内容demo相关推荐

  1. 浩辰CAD看图王手机版中添加的图片批注在电脑端如何查看?

    在使用CAD看图软件浩辰CAD看图王APP中批注功能的过程中,有时候为了CAD图纸能更清晰的展示,会需要在批注的时候插入图片说明,所以说特定场合下需要用电脑端打开,应该如何查看在手机中添加的图片批注呢 ...

  2. Flutter Listener 监听手指的滑动方向、监听手指上下滑动

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  3. html禁止页面左右滑动,js阻止移动端默认事件以及只阻止横向滚动事件方法

    js阻止移动端默认事件,是在相关的touch事件的时候利用event.preventDefault();来阻止默认滚动行为,但是如果要实现阻止横向滚动行为而不阻止竖向滚动行为就要写一个方法通过手指滑动 ...

  4. python编辑器安卓手机版_python编译器安卓下载-python编译器手机版下载v1.8.0 安卓版-2265安卓网...

    python编译器手机版是一款超棒的编程工具.专业的编程内容设计,多种多样的语言选择,完美的脚本,强大的功能,没有任何广告,快速的编写,还有快速提示,自由复制等等! python编译器安卓软件介绍 - ...

  5. python编程软件手机版下载_Python编程狮

    Python编程狮app是一款旨在为想要学习软件编程用户量身打造的手机客户端,用户可任意查看有关平台发布的各类教程视频内容进行了解,只需在线点击需要学习的教程名称即可直接进入详情界面学习:平台针对不同 ...

  6. 手机版项目管理系统软件的7个功能

    手机版项目管理系统软件,也称项目管理软件App,是一款集客户.项目.销售.合同.售后.产品.财务.OA于一体的移动端项目管理系统,管理人员.业务人员.普通员工均可随时.随地.随手使用,Android. ...

  7. 【科普】手机版项目管理系统软件的功能是什么?

    手机版项目管理系统软件,也称项目管理软件App,是一款集客户.项目.销售.合同.售后.产品.财务.OA于一体的移动端项目管理系统,管理人员.业务人员.普通员工均可随时.随地.随手使用,Android. ...

  8. swiper的介绍以及使用(移动端滑动屏幕切换页面案例)

    一.swiper介绍 Swiper常用于移动端网站的内容触摸滑动  Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端.  Swiper能实现轮播图.触屏焦点图.触屏 ...

  9. fragment+viewpager+tablayou实现滑动切换页面

    本文目标:实现滑动切换页面 首先,Tablayout控件就需要添加design library,在android studio中添加依赖  compile 'com.android.support:d ...

最新文章

  1. 【转载】【贪心】各种覆盖问题
  2. 新疆银行招聘计算机,新疆2017年银行招聘考试计算机学_计算机基础试题(19页)-原创力文档...
  3. 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
  4. docker php 多端口,docker使用之php-fpm+apache多容器的xdebug和phpstorm的配置
  5. java multivaluemap_java – 使用自定义值集合类型创建Commons Collections MultiValueMap
  6. HTML5的可视化开发工具Maqetta Designer
  7. spring boot 读取 application.properties 初始化bean
  8. mysql 支持json_MySQL 5.7 对 JSON 的支持
  9. docker pull 下载一半_Docker三个重要的基本操作,镜像,容量,仓库
  10. AJAX 带有 取消功能的 UpdateProgress
  11. 2019安全渗透类工具合集
  12. 更改远程桌面默认端口3389及删除远程桌面连接历史记录
  13. 新入职朋友说话时,一定不要用“你们”,用“咱们”
  14. access mysql odbc驱动程序_access odbc驱动下载|
  15. CSS实现盒子居中对齐的七种方法
  16. 微信账户如何解除对第三方应用的授权
  17. linux上wget命令出现HTTP request sent, awaiting response... 400 Bad Request问题
  18. Java并发编程简介
  19. c 语言url 编码转换,在线编码转换URL编码URL解码
  20. 鸢尾花分类python,Python鸢尾花分类实现

热门文章

  1. USB基础---Linux USB驱动层次
  2. centos 修改ssh默认端口号
  3. vue-music(1)音乐播发器 项目开发记录
  4. WMI-Win32_baseboard 主板参数
  5. mac下为什么光标按方向键只能一个字一个字地蹦
  6. 浏览器兼容--条件样式,选择符前缀,样式属性前缀
  7. canvas绘制正文形并填充-2
  8. 使用Troll对ARM Cortex-M处理器进行系统内核调试
  9. IIS怎么设置本地域名解析(本地域名测试配置)
  10. 改变UITextField PlaceHolder的字体和颜色,不影响正常输入