モバイル端末上で左にスライドして削除ボタンを表示する機能をJSで実装

不言
リリース: 2018-06-25 14:28:46
オリジナル
1831 人が閲覧しました

最近モバイル プロジェクトに取り組んでいたとき、リスト ページの各項目を左にスライドしたときに表示される、対応する削除ボタンを実装する必要がありました。実際、この機能の実装は非常に簡単です。この記事では主にモバイル端末を左にスライドさせた際に表示される削除ボタンの実装をjsベースで紹介していますので、必要な方は参考にしてみてください

最近モバイル端末のプロジェクトに取り組む際に、次のようなことを意識する必要があります。リスト ページの各項目を左にスライドすると、対応する表示が表示されます。削除ボタンについては、以前に同じ機能を実装するために 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


上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

jsを使用して水平方向のドラッグアンドドロップナビゲーションバー機能を実装する方法

jsでuploadifyのアップロード数を制限する実装


以上がモバイル端末上で左にスライドして削除ボタンを表示する機能をJSで実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
js
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート