ホームページ > 記事 > ウェブフロントエンド > 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('.list li a'); for(var i = 0; i < container.length; i++){ var x, y, X, Y, swipeX, swipeY; container[i].addEventListener('touchstart', function(event) { x = event.changedTouches[0].pageX; y = event.changedTouches[0].pageY; swipeX = true; swipeY = true ; if(expansion){ //判断是否展开,如果展开则收起 expansion.className = ""; } }); container[i].addEventListener('touchmove', 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
は、さまざまな要素のサイズ、間隔などを計算するために使用されます。
media screen
を使用することもできます。 @media screen は非常にアクティブなので、処理するには少し無力なようです。 レンダリングは次のとおりです: font-size
,再利用rem相对于根节点html的font-size
来计算的原理来实现不同元素的大小、间距等。
也有人说其实不用这样的js来判断,直接用css3的响应式@media screen
也可以,其实我认为在各种尺寸的安卓屏幕如此活跃的当下,@media screen
モバイル端末で左にスライドしたときの削除ボタン機能を実現するための JS に基づくその他の関連記事については、PHP 中国語 Web サイトに注目してください。