移動手機APP手指滑動切換圖片特效附源碼下載
這是一款效果非常炫酷的移動手機APP滑動手指切換圖片特效。該APP特效在移動手機中用戶可以通過手指的左右滑動來切換圖片,在桌面設備中通過鼠標也可達到同樣的效果。
使用方法
HTML結構
這個移動手機APP切換圖片特效的HTML結構采用嵌套<div>的HTML結構,每一張圖片卡片都包裹在div.demo__card中,里面放置了圖片,描述信息和一些額外的圖層。
<div class="demo__card"> <div class="demo__card__top brown"> <div class="demo__card__img"></div> <p class="demo__card__name">Hungry cat</p> </div> <div class="demo__card__btm"> <p class="demo__card__we">Whatever</p> </div> <div class="demo__card__choice m--reject"></div> <div class="demo__card__choice m--like"></div> <div class="demo__card__drag"></div> </div>
m--reject是向左移動圖片時的圖層,m--like是向右移動圖片時的圖層,demo__card__drag是拖動層。
JavaScript
在jQuery代碼中,pullChange()函數(shù)用于設置向左和向右兩個滑動層的旋轉角度和透明度。release()函數(shù)用于判斷用戶是向左還是向右滑動手指,并為這些動作在DOM元素上添加相應的class。
function pullChange() { animating = true; deg = pullDeltaX / 10; $card.css('transform', 'translateX(' + pullDeltaX + 'px) rotate(' + deg + 'deg)'); var opacity = pullDeltaX / 100; var rejectOpacity = opacity >= 0 ? 0 : Math.abs(opacity); var likeOpacity = opacity <= 0 ? 0 : opacity; $cardReject.css('opacity', rejectOpacity); $cardLike.css('opacity', likeOpacity); } ; function release() { if (pullDeltaX >= decisionVal) { $card.addClass('to-right'); } else if (pullDeltaX <= -decisionVal) { $card.addClass('to-left'); } if (Math.abs(pullDeltaX) >= decisionVal) { $card.addClass('inactive'); setTimeout(function () { $card.addClass('below').removeClass('inactive to-left to-right'); cardsCounter++; if (cardsCounter === numOfCards) { cardsCounter = 0; $('.demo__card').removeClass('below'); } }, 300); } if (Math.abs(pullDeltaX) < decisionVal) { $card.addClass('reset'); } setTimeout(function () { $card.attr('style', '').removeClass('reset').find('.demo__card__choice').attr('style', ''); pullDeltaX = 0; animating = false; }, 300); };
最后監(jiān)聽mousedown和touchstart事件,并對非.inactive的卡片元素執(zhí)行卡片切換操作。
使用方法
HTML結構
這個移動手機APP切換圖片特效的HTML結構采用嵌套<div>的HTML結構,每一張圖片卡片都包裹在div.demo__card中,里面放置了圖片,描述信息和一些額外的圖層。
<div class="demo__card"> <div class="demo__card__top brown"> <div class="demo__card__img"></div> <p class="demo__card__name">Hungry cat</p> </div> <div class="demo__card__btm"> <p class="demo__card__we">Whatever</p> </div> <div class="demo__card__choice m--reject"></div> <div class="demo__card__choice m--like"></div> <div class="demo__card__drag"></div> </div>
m--reject是向左移動圖片時的圖層,m--like是向右移動圖片時的圖層,demo__card__drag是拖動層。
JavaScript
在jQuery代碼中,pullChange()函數(shù)用于設置向左和向右兩個滑動層的旋轉角度和透明度。release()函數(shù)用于判斷用戶是向左還是向右滑動手指,并為這些動作在DOM元素上添加相應的class。
function pullChange() { animating = true; deg = pullDeltaX / 10; $card.css('transform', 'translateX(' + pullDeltaX + 'px) rotate(' + deg + 'deg)'); var opacity = pullDeltaX / 100; var rejectOpacity = opacity >= 0 ? 0 : Math.abs(opacity); var likeOpacity = opacity <= 0 ? 0 : opacity; $cardReject.css('opacity', rejectOpacity); $cardLike.css('opacity', likeOpacity); } ; function release() { if (pullDeltaX >= decisionVal) { $card.addClass('to-right'); } else if (pullDeltaX <= -decisionVal) { $card.addClass('to-left'); } if (Math.abs(pullDeltaX) >= decisionVal) { $card.addClass('inactive'); setTimeout(function () { $card.addClass('below').removeClass('inactive to-left to-right'); cardsCounter++; if (cardsCounter === numOfCards) { cardsCounter = 0; $('.demo__card').removeClass('below'); } }, 300); } if (Math.abs(pullDeltaX) < decisionVal) { $card.addClass('reset'); } setTimeout(function () { $card.attr('style', '').removeClass('reset').find('.demo__card__choice').attr('style', ''); pullDeltaX = 0; animating = false; }, 300); };
最后監(jiān)聽mousedown和touchstart事件,并對非.inactive的卡片元素執(zhí)行卡片切換操作。
$(document).on('mousedown touchstart', '.demo__card:not(.inactive)', function (e) { if (animating) return; $card = $(this); $cardReject = $('.demo__card__choice.m--reject', $card); $cardLike = $('.demo__card__choice.m--like', $card); var startX = e.pageX || e.originalEvent.touches[0].pageX; $(document).on('mousemove touchmove', function (e) { var x = e.pageX || e.originalEvent.touches[0].pageX; pullDeltaX = x - startX; if (!pullDeltaX) return; pullChange(); }); $(document).on('mouseup touchend', function () { $(document).off('mousemove touchmove mouseup touchend'); if (!pullDeltaX) return; release(); }); });
相關文章
jQuery插件開發(fā)的兩種方法及$.fn.extend的詳解
jQuery插件開發(fā)分為兩種:1 類級別、2 對象級別,下面為大家詳細介紹下2014-01-01如何用jQuery實現(xiàn)ASP.NET GridView折疊伸展效果
我們今天就一個具體的需求進行分析,引出如何用jQuery實現(xiàn)ASP.NET GridView折疊伸展效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-09-09從零開始學習jQuery (九) jQuery工具函數(shù)
我們經常要使用腳本處理各種業(yè)務邏輯, 最常見的就是數(shù)組和對象的操作. jQuery工具函數(shù)為我們操作對象和數(shù)組提供了便利條件.2011-02-02