>  기사  >  웹 프론트엔드  >  프론트엔드 프로그래머가 알아야 할 jQuery 팁

프론트엔드 프로그래머가 알아야 할 jQuery 팁

伊谢尔伦
伊谢尔伦원래의
2016-12-03 11:45:171242검색

프론트엔드 프로그래머가 알아야 할 jQuery 팁

jQuery에서 animate 및 scrollTop 메소드를 사용하면 플러그인 없이 맨 위로 스크롤하는 간단한 애니메이션을 만들 수 있습니다.

// Back to top
$('.top').click(function (e) {
  e.preventDefault();
  $('html, body').animate({scrollTop: 0}, 800);
});
<!-- Create an anchor tag -->
<a class="top" href="#">Back to top</a>

변경 scrollTop 스크롤바를 배치하려는 위치에서 값이 변경됩니다. 실제로 해야 할 일은 문서 상단으로 스크롤될 때까지 문서 본문을 800밀리초 동안 애니메이션화하는 것뿐입니다.

참고: scrollTop의 일부 잘못된 동작에 주의하세요.

이미지 미리 로드

웹 페이지에서 처음에 보이지 않는(예: 마우스 오버 시) 많은 이미지를 사용하려는 경우 다음 이미지를 미리 로드할 수 있습니다.

$.preloadImages = function () {
  for (var i = 0; i < arguments.length; i++) {
    $(&#39;<img  alt="프론트엔드 프로그래머가 알아야 할 jQuery 팁" >&#39;).attr(&#39;src&#39;, arguments[i]);
  }
};
$.preloadImages(&#39;img/hover-on.png&#39;, &#39;img/hover-off.png&#39;);

이미지가 로드되었는지 확인

때때로 스크립트를 계속하기 위해 이미지가 모두 로드되었는지 확인해야 할 수도 있습니다.

$(&#39;img&#39;).load(function () {
  console.log(&#39;image load successful&#39;);
});

또한 ID 또는 클래스가 포함된 프론트엔드 프로그래머가 알아야 할 jQuery 팁 태그 특정 이미지가 로드되는지 여부.

깨진 이미지 자동 복구

깨진 이미지 링크를 하나씩 교체하는 것은 매우 고통스럽습니다. 하지만 다음과 같은 간단한 코드가 도움이 될 수 있습니다.

$(&#39;img&#39;).on(&#39;error&#39;, function () {
  if(!$(this).hasClass(&#39;broken-image&#39;)) {
    $(this).prop(&#39;src&#39;, &#39;img/broken.png&#39;).addClass(&#39;broken-image&#39;);
  }
});

깨진 링크가 없더라도 이 코드를 추가하면 아무 것도 잃지 않을 것입니다.

호버 토글 클래스

사용자가 클릭 가능한 요소 위에 마우스를 올리면 색상이 변경되기를 원한다고 가정해 보겠습니다. 그런 다음 사용자가 요소를 가리키면 요소에 클래스를 추가하고 그렇지 않으면 제거할 수 있습니다.

$(&#39;.btn&#39;).hover(function () {
  $(this).addClass(&#39;hover&#39;);
}, function () {
  $(this).removeClass(&#39;hover&#39;);
});

필요한 CSS만 추가하면 됩니다. 더 쉬운 방법은ggleClass 메서드를 사용하는 것입니다.

$(&#39;.btn&#39;).hover(function () {
  $(this).toggleClass(&#39;hover&#39;);
});

참고: 이 경우 CSS 솔루션이 더 빠를 수도 있지만 이 메서드를 이해하는 것이 필요합니다.

입력 필드 비활성화

때때로 사용자가 특정 작업(예: "읽었습니다" 확인)을 수행할 때까지 양식의 제출 버튼이나 텍스트 입력 중 하나를 비활성화할 수 있습니다. 약관' 확인란). 원할 때 활성화하려면 입력에 비활성화 속성을 추가하세요.

$(&#39;input[type="submit"]&#39;).prop(&#39;disabled&#39;, true);

그런 다음 입력의 prop 메서드를 실행하고 비활성화 값을 false로 설정합니다.

$(&#39;input[type="submit"]&#39;).prop(&#39;disabled&#39;, false);

링크 로드 중지

때로는 특정 웹페이지에 링크할 필요도 없고 페이지를 다시 로드하고 싶지도 않은 경우가 있습니다. 예를 들어 다른 스크립트를 실행하기 위해 링크가 다른 작업을 하도록 할 수도 있습니다. 이를 위해서는 기본 동작을 차단하는 것에 대해 소란을 피워야 합니다.

$(&#39;a.no-link&#39;).click(function (e) {
  e.preventDefault();
});

페이드인/슬라이딩 전환

슬라이딩과 페이딩은 jQuery를 사용하여 애니메이션을 적용할 때 많이 사용하는 기능입니다. 사용자가 요소를 클릭한 후에 요소를 표시하려면 fadeIn 및 SlideDown 메서드를 사용하는 것이 완벽합니다. 그러나 첫 번째 클릭 시 요소가 나타나고 두 번째 클릭 시 사라지도록 하려면 다음 코드를 사용해 보세요.

// Fade
$(&#39;.btn&#39;).click(function () {
  $(&#39;.element&#39;).fadeToggle(&#39;slow&#39;);
});
// Toggle
$(&#39;.btn&#39;).click(function () {
  $(&#39;.element&#39;).slideToggle(&#39;slow&#39;);
});

简单的手风琴

这是一个可快速生成手风琴的简单方法:

// Close all panels
$(&#39;#accordion&#39;).find(&#39;.content&#39;).hide();
// Accordion
$(&#39;#accordion&#39;).find(&#39;.accordion-header&#39;).click(function () {
  var next = $(this).next();
  next.slideToggle(&#39;fast&#39;);
  $(&#39;.content&#39;).not(next).slideUp(&#39;fast&#39;);
  return false;
});

通过添加这个脚本,你真正需要做的仅仅是在页面上添加必要的HTML元素,这样它就可以运行工作了。

让两个div高度相同

有时候,你需要让两个div无论包含什么内容都拥有相同的高度:

$(&#39;.div&#39;).css(&#39;min-height&#39;, $(&#39;.main-div&#39;).height());

设置 min-height,这意味着它可以比主div大但绝对不能比主div小。不过,还有一种更灵活的方法是遍历一组元素,然后将高度设置为最高的那个元素的高度:

var $columns = $(&#39;.column&#39;);
var height = 0;
$columns.each(function () {
  if ($(this).height() > height) {
    height = $(this).height();
  }
});
$columns.height(height);

如果你希望所有列的高度相同:

var $rows = $(&#39;.same-height-columns&#39;);
$rows.each(function () {
  $(this).find(&#39;.column&#39;).height($(this).height());
});

在新标签页/窗口打开外部链接

在一个新的浏览器tab或窗口中打开外部链接,并确保同一个来源的链接能在同一个tab或者窗口中打开:

$(&#39;a[href^="http"]&#39;).attr(&#39;target&#39;, &#39;_blank&#39;);
$(&#39;a[href^="//"]&#39;).attr(&#39;target&#39;, &#39;_blank&#39;);
$(&#39;a[href^="&#39; + window.location.origin + &#39;"]&#39;).attr(&#39;target&#39;, &#39;_self&#39;);

注意:window.location.origin 在IE10中无效。修复的时候要小心这个问题。

在改变Visibility时触发

当用户不再关注某个tab,或重新聚焦原来的那个tab上时,触发JavaScript:

$(document).on(&#39;visibilitychange&#39;, function (e) {
  if (e.target.visibilityState === "visible") {
    console.log(&#39;Tab is now in view!&#39;);
  } else if (e.target.visibilityState === "hidden") {
    console.log(&#39;Tab is now hidden!&#39;);
  }
});

AJAX调用错误处理

当Ajax调用返回404或500错误时,就执行错误处理程序。如果没有定义处理程序,其他的jQuery代码或会就此罢工。定义一个全局的Ajax错误处理程序:

$(document).ajaxError(function (e, xhr, settings, error) {
  console.log(error);
});

链式插件调用

jQuery允许“链式”插件的方法调用,以减轻反复查询DOM并创建多个jQuery对象的过程。比方说,下面的代码片段代表了你的插件方法调用:

$(&#39;#elem&#39;).show();
$(&#39;#elem&#39;).html(&#39;bla&#39;);
$(&#39;#elem&#39;).otherStuff();

通过使用链式,可以大大改善:

$(&#39;#elem&#39;)
  .show()
  .html(&#39;bla&#39;)
  .otherStuff();

还有一种方法是在(前缀$)变量中高速缓存元素:

var $elem = $(&#39;#elem&#39;);
$elem.hide();
$elem.html(&#39;bla&#39;);
$elem.otherStuff();

链式和高速缓存的方法都是jQuery中可以让代码变得更短和更快的代最佳做法。

英文原文:jQuery Tips Everyone Should Know

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.