私はこのpluginを使って水平のタイムラインを作成しています。左矢印と右矢印を使用して日付間を移動できます。日付をクリックすると、同じ日付に対応するフッターに変更されます。scaleX()で表示/非表示にしているときに要素の表示を確認するにはどうすればよいですか?
私の問題は次のとおりです。特定の日付が現在のビューポートに表示されているかどうかを確認しようとしています。したがって、プラグインが最初にロードされた場合、次の日付が表示されます。「16 Jan」、「Feb Feb」、「20 Mar」、「20 May」が表示されます。右矢印をクリックすると、これらの日付が「09 Jul」、「30 Aug」、「15 Sep」、「01 Nov」の日付に置き換えられます。さて、この時点で、たとえば、 "16 Jan"という日付が表示されているかどうかを知りたいと思います(この場合は表示されません)。各日付は私がセレクタ以下(「1月16日」の一例)で確認したい要素を取得することができますdata-date
属性の形で各日付に対応a
要素に追加されているので
:
$("a[data-date='16/01/2014'");
今の視認性を確認するために、私が試してみました2つの異なるアプローチ:
(このanswerに見られるように)最初のアプローチ
$("a[data-date='16/01/2014'").is(':visible');
このアプローチは常に私を真実に戻し、したがって機能しません。 (このanswerに見られるように)
第二のアプローチ
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
、その後:
var a = $("a[data-date='16/01/2014'");
var b = isElementInViewport();
このアプローチは、いつも私がtrueを返し、これも動作しません。
各矢印をクリックした後に要素が表示され消えていく様子は、この特定の状況ではわからない影響があるCSS関数scaleX()を使用しているために機能しないことがあります。
この後、私の質問は次のとおりです。この特定のケースで要素の可視性をチェックすることは可能ですか?もしそうなら、どうしたらいいですか?
「isDateOpen = true」というクリックに変数フラグを追加できますか?それとも何か?あなたはすでにそれの周りにいくつかの機能を持っているので。 – ntgCleaner
@ntgCleanerこれを行うには、ページあたりの幅、タイムラインの幅の合計、ページ数の計算、日付を対応するページに関連付けるデータ構造を作成する必要があります。その後、矢印をクリックすると、提案したような日付にプロパティを追加します。しかしこれは私の最後の手段です。私はもっと簡単なものを探していた。 –