在我的网站上,我使用JS进行视差滚动。我想有条件地在桌面PC上加载JS,宽度为> = 1025像素。而且我非常需要帮助来优化和整合它们。
具有Parallax-Effect的部分具有多个数据属性:
<section id="profile" class="slide" data-speed="2" data-offsetY="185" data-type="background">
这些部分还有通过css设置的背景图像。
.slide {
padding:0;
width:100%;
position:relative;
margin:0 auto;
overflow:hidden;
}
#profile {
background: url(../assets/backgrounds/02_profile_back.jpg) 50% 185px no-repeat fixed, #0f0f11;
height:1027px;
}
到目前为止我得到了什么:
到目前为止,这是代码: (Parallax脚本是:由Richard Shepherd修改,由Ryan Boudreaux修改)
function myFunction(){
// Cache the Window object
$window = $(window);
// Cache the Y offset and the speed of each sprite
$('[data-type]').each(function() {
$(this).data('offsetY', parseInt($(this).attr('data-offsetY')));
$(this).data('Xposition', $(this).attr('data-Xposition'));
$(this).data('speed', $(this).attr('data-speed'));
});
// For each element that has a data-type attribute
$('section[data-type="background"]').each(function(){
// Store some variables based on where we are
var $self = $(this),
offsetCoords = $self.offset(),
topOffset = offsetCoords.top;
// This is the part I'm having trouble with //
// When the window is scrolled, resized, loaded...
$(window).on('scroll resize load',function(e){
// Check if Screen-width is higher or equal to 1025px
enquire.register('screen and (min-width:1025px)', {
match : function() {
// If this section is in view
if ( ($window.scrollTop() + $window.height()) > (topOffset) &&
( (topOffset + $self.height()) > $window.scrollTop() ) ) {
// Scroll the background at var speed
// the yPos is a negative value because we're scrolling it UP!
var yPos = -($window.scrollTop() / $self.data('speed'));
// If this element has a Y offset then add it on
if ($self.data('offsetY')) {
yPos += $self.data('offsetY');
}
// Put together our final background position
var coords = '50% '+ yPos + 'px';
// Move the background
$self.css({ backgroundPosition: coords });
}; // in view
},
unmatch : function() {
$('#profile').css('background-position', '50% 0px');
}
}).listen(); // Check Screen Width
}); // window load resize scroll
}); // each data-type
} // myFunction
我正在寻找一种方法来挤压另一个if循环,如果设备不是触控设备,则只执行第一个“匹配” - 部分。我发现var isTouch = (('ontouchstart' in window) || !!('msmaxtouchpoints' in window.navigator));
但我无法弄清楚如何实现这一点,所以一切都融合在一起。
我知道我的代码很乱,你现在可以告诉我,我是一个菜鸟。然而,我渴望学习并期待你的回复。非常感谢!
答案 0 :(得分:0)
您可以使用yepnope动态加载JavaScript,然后使用window.innerWidth检查屏幕宽度。除非您使用浏览器用户代理字符串,否则我不确定是否专门检查移动设备。