基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码


Posted in HTML / CSS onDecember 20, 2016

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧。

公司的移动端项目是基于zepto的,有一个页面要求文字能够无缝地不停向上滚动,但查了网上的资料,大多都是基于jquery的,虽然稍作修改就可以用于移动端,但不能实现触摸上下翻滚。所以就去了zepto的官网查看其API,却发现如果要使用zepto的swipe()方法,需要引用其已经封装好的touch.js文件,我就赶紧引用了这个js文件,可在实际测试中,官网给出的touch.js文件不能适用于swipe()方法,于是,一头雾水,继续查资料,由于网上关于zepto方面的东西较少,所以,也没有找出其不能适用于swipe()方法的原因。后来,不经意间发现由百度云Clouda团队开发的一个touch.js(目前,该js也是由这个团队在维护),在这个js环境下居然能使用swipe()方法,于是,赶紧拿来测试。结果很OK哇!这里要着重感谢百度云Clouda团队,你们真牛!!!  在这里要注意,zepto本身是没有animate()方法的,它是将这个方法封装成了一个fx.js(去官网下载),所以在使用animate()时要引用fx.js。

若您觉得本插件有bug或不足之处,请留言,我将及时修改,谢谢!

以下是基于zepto的移动端无缝向上滚动并上下触摸滑动插件的完整代码:

HTML部分:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" >
<title>无标题文档</title>
<style>
*{margin:0;padding:0}
li{list-style:none;}
.box{margin:20px;width:200px;height:128px;overflow:hidden;border:1px solid #ccc;padding:5px 10px 15px;font-size:14px;}
.box ul li{line-height:20px;}
</style>
</head>

<body>
<div class="box">
  <ul>
    <li>11111111111222222</li>
    <li>2222222202</li>
    <li>3333333303</li>
    <li>4444444404</li>
    <li>5555555505</li>
    <li>6666666606</li>
    <li>1111111111</li>
    <li>2222222202</li>
    <li>3333333303</li>
    <li>4444444404</li>
    <li>5555555505</li>
    <li>6666666606</li>
  </ul>
</div>
<script src="zepto.min.js"></script>
<script src="fx.js"></script>
<script src="touch-0.2.14.min.js"></script>
<script src="zepto.textSlider.js"></script>
<script>
$(function(){
    $(".box").textSlider({
        speed: 50, //数值越大,速度越慢
        line:10    //触摸翻滚的条数
    });
    })
</script>
</body>

插件 zepto.textSlider.js 部分:

/*
* textSlider 0.1
* Copyright (c) 2014 tnnyang 
* Dependence Zepto v1.1.6 & fx.js & touch-0.2.14.min.js
* Author by 小坏
*/ 
(function($){
    $.fn.textSlider = function(options){
    //默认配置
    var defaults = {
        speed:40,  //滚动速度,值越大速度越慢
        line:1     //滚动的行数
    };
    
    var opts = $.extend({}, defaults, options);
    
    var $timer;
    function marquee(obj, _speed){                                              
        var top = 0;
        var margintop;
        $timer = setInterval(function(){            
            top++;
            margintop = 0-top;
            obj.find("ul").animate({
                marginTop: margintop
                },0,function(){
                    var s = Math.abs(parseInt($(this).css("margin-top")));                                
                    if(s >= 20){
                        top = 0;
                        $(this).css("margin-top", 0);   //确保每次都是从0开始,避免抖动
                        $(this).find("li").slice(0, 1).appendTo($(this));                
                    }
                });                        
        }, _speed);
      }
      
    this.each(function(){            
        var speed = opts["speed"],line = opts["line"],_this = $(this);
        var $ul =_this.find("ul");
        if($ul.height() > _this.height()){            
            marquee(_this, speed);
        }
        
        //触摸开始
        _this.on('touchstart', function(ev){
            ev.preventDefault();
            clearInterval($timer);
        });
        
        //向上滑动
        _this.on('swipeup', function(ev){
            ev.preventDefault();
            clearInterval($timer);
            if($ul.height() > _this.height()){    
               for(i=0;i<opts.line;i++){
                    $ul.find("li").first().appendTo($ul);
                   }
                $ul.css("margin-top",0);
            }
        });
        
        //向下滑动
        _this.on('swipedown', function(ev){
            ev.preventDefault();
            clearInterval($timer);
            if($ul.height() > _this.height()){
              for(i=0;i<opts.line;i++){
                  $ul.find("li").first().before($ul.find("li").last());    
                  }                                             
                $ul.css("margin-top",0);
            }
        });
        
        //触摸结束
        _this.on('touchend',function(ev){
            ev.preventDefault();
            if($ul.height() > _this.height()){
              marquee(_this, speed);
            }
        });        
    });
  }
})(Zepto);

DEMO下载:基于zepto的插件之移动端无缝向上滚动并上下触摸滑动

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3制作精致的照片墙特效
Jun 07 HTML / CSS
CSS3弹性盒模型开发笔记(三)
Apr 26 HTML / CSS
10 套华丽的CSS3 按钮小结
Oct 03 HTML / CSS
css3中background新增的4个新的相关属性用法介绍
Sep 26 HTML / CSS
详解CSS3+JS完美实现放大镜模式
Dec 03 HTML / CSS
HTML5移动端开发遇见的东西
Oct 11 HTML / CSS
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
Jan 30 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
May 12 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
Mar 15 HTML / CSS
移动端Html5页面生成图片解决方案
Aug 07 HTML / CSS
HTML5实现音频和视频嵌入的方法
Aug 22 HTML / CSS
CSS巧用渐变实现高级感背景光动画
Dec 06 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
Dec 20 #HTML / CSS
详解HTML5中表单验证的8种方法介绍
Dec 19 #HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
Dec 16 #HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
Dec 16 #HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
Dec 15 #HTML / CSS
canvas与html5实现视频截图功能示例
Dec 15 #HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
Dec 14 #HTML / CSS
You might like
php microtime获取浮点的时间戳
2010/02/21 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
巧用canvas
2017/01/21 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
《javascript少儿编程》location术语总结
2018/05/27 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
使用python实现strcmp函数功能示例
2014/03/25 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
留学自荐信的技巧
2013/10/17 职场文书
新店开张活动方案
2014/08/24 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
预备党员转正意见
2015/06/01 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS