javascript - 用 JavaScript 模仿 iPhone 主屏幕滑动

标签 javascript iphone

我想在 Safari/Chrome/Firefox 上用 JavaScript 模仿 iPhone 主屏幕。

通过模仿我的意思是: - 有几页 - 通过单击并拖动/滑动鼠标在页面之间切换 - 让 iPhone 主屏幕底部的那些点显示它所在的页面

最接近我想要的是: http://jquery.hinablue.me/jqiphoneslide/ 但是滑动效果没有iPhone那么好(我必须先滑动,松开鼠标按钮后才会出现动画),而且底部没有点。

最佳答案

我通过使用 jQuery 和 jquery.slide-0.4.3.js 解决了这个问题。

jQuery Slide 自动在每个页面之间滑动,因此我必须添加一个鼠标事件(onMouseDrag)来停止自动滑动并对用户使用react。效果非常好。

这是我添加到 jSlide 中的内容

var jSlide = function(element, options)
    {


    element = $(element);

    $('ul.layers li', element).sliderDisableTextSelect();

    // my code here

    var dragging = false;
    var srcX;
    var offsetX;
    var diff; 



    this.manualDown = function(event) {
       dragging = true;
       srcX = event.pageX;
       offsetX =  parseFloat($('ul.layers li', element).css('marginLeft'));

       obj.settings.easing = "easeOutExpo";

       if(obj.settings.loopNr != null) {
           obj.toggleLoop(0);
       };



       return false;
    };

    this.manualMove = function(event) {     
       if (dragging) {
           diff = event.pageX - srcX;
           $('ul.layers li', element).css('marginLeft',(offsetX+diff)+'px');
           console.log((offsetX+diff)+'px');
       };           
       return false;
    };

    this.manualUp = function(event) {
      if (dragging) {
        dragging = false;


        if ((diff<-obj.settings.layerWidth/5) && (obj.settings.slidePos<obj.settings.layersSize-1)) {
            obj.slideTo(parseInt(obj.settings.slidePos)+1);
        } else if ((diff>obj.settings.layerWidth/5) && (obj.settings.slidePos>0)) {
            obj.slideTo(parseInt(obj.settings.slidePos)-1);
        } else { // if not slid far enough nor is it the last slide 
            obj.slideTo(obj.settings.slidePos);
        };
      };
    };

    this.manualLeave = function(event) {
      if (dragging) {
        dragging = false;

        if ((diff<0) && (obj.settings.slidePos<obj.settings.layersSize-1)) {
            obj.slideTo(parseInt(obj.settings.slidePos)+1);
        } else if ((diff>0) && (obj.settings.slidePos>0)) {
            obj.slideTo(parseInt(obj.settings.slidePos)-1);
        } else { // if it's the last slide 
            obj.slideTo(obj.settings.slidePos);
        };
      };

    };


    element.mousedown(this.manualDown);
    element.mousemove(this.manualMove);
    element.mouseup(this.manualUp);
    element.mouseleave(this.manualLeave);

此外,为了防止使用鼠标拖动时选择文本,我在 jSlide 类声明之前添加了以下内容:

  $.extend($.fn.disableTextSelect = function() {
        return this.each(function(){
            if($.browser.mozilla){//Firefox
                $(this).css('MozUserSelect','none');
            }else if($.browser.msie){//IE
                $(this).bind('selectstart',function(){return false;});
            }else{//Opera, etc.
                $(this).mousedown(function(){return false;}); // this is handled in jSlide
            }
        });
    });

    $.extend($.fn.sliderDisableTextSelect = function() {
        return this.each(function(){
            if($.browser.mozilla){//Firefox
                $(this).css('MozUserSelect','none');
            }else if($.browser.msie){//IE
                $(this).bind('selectstart',function(){return false;});
            }else{//Opera, etc.
        //      $(this).mousedown(function(){return false;}); // this is handled in jSlide
            }
        });
    });

我不确定所有代码是否都是必要的...很可能您在粘贴到 jquery.slide 后仍然需要对其进行调整,但它应该可以帮助您开始..

关于javascript - 用 JavaScript 模仿 iPhone 主屏幕滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2818097/

相关文章:

javascript - 迭代中的 ES6 常量用法

javascript - 捕获产品印象而不会使网站变慢

iphone - 检测 UITableView 中的触摸和按住

ios - 快速显示隐藏的容器 View

iphone - 我无法通过按回车键隐藏键盘

iphone - TableView 部分更改时的方法调用

ios - 如何动态设置 UIStackView 中元素之间的间距?

javascript - 使用 -webkit-overflow-scrolling : touch 时更改 HTML 滚动条颜色

javascript - 在 IE9 中 javascript 不起作用,但打开控制台后它可以工作

javascript - 在 Angular.js 中更改 View 时处理 $scope 状态和值的正确方法是什么