ホームページ >ウェブフロントエンド >jsチュートリアル >JSをベースにモバイル端末の左スライド時の削除ボタン機能を実現

JSをベースにモバイル端末の左スライド時の削除ボタン機能を実現

高洛峰
高洛峰オリジナル
2017-02-23 17:17:122058ブラウズ

最近モバイル プロジェクトに取り組んでいたとき、リスト ページの各項目を左にスライドすると表示される対応する削除ボタンを実装する必要がありました。もともと zepto の touch.js プラグインを直接使用したかったのです。以前に同じ機能を実装するためにこのプラグインを使用していましたが、当時は swipeLeft メソッドと swipeRight メソッドを使用するだけで非常に使いやすかったのですが、今日この機能を再度使用し始めたときに、これら 2 つのメソッドに問題があることがわかりました。使用しても効果はなく、まったく反応がありませんでした。オンラインで情報を確認し、zepto と touch.js の最新バージョンをダウンロードしましたが、うまくいきませんでした。したがって、このプラグインは放棄されました。

以下は私が後で実装したコードです。実際には、ネイティブjsのタッチイベントを使用し、タッチポイントの座標を組み合わせて左右のスワイプを決定します。また、モバイル アダプテーション用のネイティブ JS の実装がページの先頭に追加されていることに気付きました。これは主に、さまざまなサイズの画面上でのモバイル ページの表示を容易にし、非常に小さなエラーでデザイン ドラフトをより適切に準備するためです。さまざまなサイズの画面で表示されますが、使用される本体はレムです。

モバイルターミナルアダプティブjs

<!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>js侧滑显示删除按钮</title>
<style>
*{margin:0;padding:0;}
body{font-size:.14rem;}
li{list-style:none;}
i{font-style:normal;}
a{color:#393939;text-decoration:none;}
.list{overflow:hidden;margin-top:.2rem;padding-left:.3rem;border-top:1px solid #ddd;}
.list li{overflow:hidden;width:120%;border-bottom:1px solid #ddd;}
.list li a{display:block;height:.88rem;line-height:.88rem;-webkit-transition:all 0.3s linear;transition:all 0.3s linear;}
.list li i{float:right;width:15%;text-align:center;background:#E2421B;color:#fff;}
.swipeleft{transform:translateX(-15%);-webkit-transform:translateX(-15%);}
</style>
<script>
//计算根节点HTML的字体大小
function resizeRoot(){
 var deviceWidth = document.documentElement.clientWidth,
  num = 750,
  num1 = num / 100;
 if(deviceWidth > num){
  deviceWidth = num; 
 }
 document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根节点HTML的字体大小初始化
resizeRoot();

window.onresize = function(){
 resizeRoot();
};
</script>
</head>
<body>
<section>
<p class="list">
 <ul>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮1<i>删除</i></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮2<i>删除</i></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮3<i>删除</i></a></li>
 </ul>
</p>
<script>
//侧滑显示删除按钮
var expansion = null; //是否存在展开的list
var container = document.querySelectorAll(&#39;.list li a&#39;);
for(var i = 0; i < container.length; i++){ 
 var x, y, X, Y, swipeX, swipeY;
 container[i].addEventListener(&#39;touchstart&#39;, function(event) {
  x = event.changedTouches[0].pageX;
  y = event.changedTouches[0].pageY;
  swipeX = true;
  swipeY = true ;
  if(expansion){ //判断是否展开,如果展开则收起
   expansion.className = "";
  }  
 });
 container[i].addEventListener(&#39;touchmove&#39;, function(event){
  
  X = event.changedTouches[0].pageX;
  Y = event.changedTouches[0].pageY;  
  // 左右滑动
  if(swipeX && Math.abs(X - x) - Math.abs(Y - y) > 0){
   // 阻止事件冒泡
   event.stopPropagation();
   if(X - x > 10){ //右滑
    event.preventDefault();
    this.className = ""; //右滑收起
   }
   if(x - X > 10){ //左滑
    event.preventDefault();
    this.className = "swipeleft"; //左滑展开
    expansion = this;
   }
   swipeY = false;
  }
  // 上下滑动
  if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
   swipeX = false;
  }  
 });
}
</script>
</body>
</html>

原理は実際には非常に単純です。つまり、さまざまな画面に従ってルートノードHTMLのfont-sizeを計算し、それを使用します。 rem はルート ノードを比較します。 html font-size は、さまざまな要素のサイズ、間隔などを計算するために使用されます。

このような js を使用して判断する必要はないと言う人もいますが、実際には、CSS3 のレスポンシブな @media screen を使用することもできます。 @media screen は非常にアクティブなので、処理するには少し無力なようです。

レンダリングは次のとおりです:

font-size,再利用rem相对于根节点html的font-size来计算的原理来实现不同元素的大小、间距等。

也有人说其实不用这样的js来判断,直接用css3的响应式@media screen也可以,其实我认为在各种尺寸的安卓屏幕如此活跃的当下,@media screen


上記は、モバイル端末で左にスライドしたときの削除ボタン機能の JS ベースの実装についてのエディターの紹介です。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。

JSをベースにモバイル端末の左スライド時の削除ボタン機能を実現モバイル端末で左にスライドしたときの削除ボタン機能を実現するための JS に基づくその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。