Jssor slider responsiveness not working when placed inside a table - jssor

When you make Jssor slider responsive and it's elements placed inside a Table, responsiveness not working anymore.
<script>
jQuery(document).ready(function ($) {
var options = {};
var jssor_slider1 = new $JssorSlider$('slider1_container', options);
//responsive code begin
//you can remove responsive code if you don't want the slider scales
//while window resizing
function ScaleSlider() {
var parentWidth = $('#slider1_container').parent().width();
if (parentWidth) {
jssor_slider1.$ScaleWidth(parentWidth);
}
else
window.setTimeout(ScaleSlider, 30);
}
//Scale slider after document ready
ScaleSlider();
//Scale slider while window load/resize/orientationchange.
$(window).bind("load", ScaleSlider);
$(window).bind("resize", ScaleSlider);
$(window).bind("orientationchange", ScaleSlider);
//responsive code end
});
</script>
and html:
<div id="slider1_container" style="position: relative; top: 0px; left: 0px; width: 600px; height: 300px; overflow: hidden;">
<!-- Slides Container -->
<div u="slides" style="cursor: move; position: absolute; overflow: hidden; left: 0px; top: 0px; width: 600px; height: 300px;">
<div><img u="image" src="image1.jpg" /></div>
<div><img u="image" src="image2.jpg" /></div>
</div>
<!-- Trigger -->
<script>jssor_slider1_starter('slider1_container');</script>
If i place "slider1_container" inside a table, the responsiveness won't work anymore.
Im creating a slider webpart for SharePoint and i don't control over the parent of "slider1_container" and any html element could be there.
And because of that table, this line of code never returns a value smaller than the initial width of slider:
var jssor_slider1 = new $JssorSlider$('slider1_container', options);
And that's why the responsiveness will fail, because if width not get any smaller then $ScaleWidth method will not scale the slider.

Since i'm creating a slider web part for SharePoint, i solved this problem by finding another Div element that is parent of the table which causing the issue.
And in this line i set element id of my savior div element like:
var parentWidth = $('#savior_parent').width();

Related

Add a div element on Leaflet map

I need to add my favorite text to middle-top of my map div, so I have:
<div id="map" style="height:300px;">
<div style="width:150px;background-color:red; z-index:1000;"> Hello World !!</div>
</div>
And this is my simplified JS code:
<script>
$(document).ready(function () {
var Lat = 32.646540;
var Lon = 51.667743;
map = L.map('map').setView([Lat, Lon], 19);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Thanks to OSM',
maxZoom: 19
}).addTo(map);
});
</script>
And the problem is that the Red Text goes behind the map and I can't manage it.
Before loading the map :
After loading the map :
add your Hello World div a higher z-index like z-index: 9999
Update
Now I see it. You add the hello World div as child to the map. You have to add it as sibling.
<div class="box"> Hello World</div>
<div id="map" style="height:300px;"></div>
CSS:
.box{
position: absolute;
top: 0;
z-index: 9999;
text-align: center;
width: 150px;
left: 50%;
margin-left: -75px; /* half of the width */
background-color:red;
}

Full width half page responsive slider

I am using jssor to create a slider for my webpage, I need my slider to be fixed half-page slider and also responsive. As when i zoom out it still take the full width of the page and fixed at the half page height.
There is new api $ScaleSize with jssor slider 25.0.6 which is available here https://www.jssor.com/script*
You can make a div to take half of the window, and fill jssor slider in the div.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Full Screen Slider - Jssor Slider</title>
<style>
html, body {
/*position: fixed;*/
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body style="font-family: Arial, Verdana, Sans-Serif;">
<script type="text/javascript" src="../js/jssor.slider-25.0.6.min.js"></script>
<script>
jssor_slider1_init = function () {
var options = {
$AutoPlay: 0, //[Optional] Auto play or not, to enable slideshow, this option must be set to greater than 0. Default value is 0. 0: no auto play, 1: continuously, 2: stop at last slide, 4: stop on click, 8: stop on user navigation (by arrow/bullet/thumbnail/drag/arrow key navigation)
$Idle: 1500, //[Optional] Interval (in milliseconds) to go for next slide since the previous stopped if the slider is auto playing, default value is 3000
$PauseOnHover: 1, //[Optional] Whether to pause when mouse over if a slider is auto playing, 0 no pause, 1 pause for desktop, 2 pause for touch device, 3 pause for desktop and touch device, 4 freeze for desktop, 8 freeze for touch device, 12 freeze for desktop and touch device, default value is 1
$DragOrientation: 1, //[Optional] Orientation to drag slide, 0 no drag, 1 horizental, 2 vertical, 3 either, default value is 1 (Note that the $DragOrientation should be the same as $PlayOrientation when $Cols is greater than 1, or parking position is not 0)
$ArrowKeyNavigation: 1, //[Optional] Steps to go for each navigation request by pressing arrow key, default value is 1.
$SlideDuration: 800, //Specifies default duration (swipe) for slide in milliseconds
$ArrowNavigatorOptions: { //[Optional] Options to specify and enable arrow navigator or not
$Class: $JssorArrowNavigator$, //[Requried] Class to create arrow navigator instance
$ChanceToShow: 2 //[Required] 0 Never, 1 Mouse Over, 2 Always
}
};
var jssor_slider1 = new $JssorSlider$('slider1_container', options);
//responsive code begin
//you can remove responsive code if you don't want the slider scales while window resizing
function ScaleSlider() {
var parentNode = jssor_slider1.$Elmt.parentNode;
var parentWidth = parentNode.clientWidth;
if (parentWidth) {
var parentHeight = parentNode.clientHeight;
jssor_slider1.$ScaleSize(parentWidth, parentHeight);
}
else {
$Jssor$.$Delay(ScaleSlider, 30);
}
}
ScaleSlider();
$Jssor$.$AddEvent(window, "load", ScaleSlider);
$Jssor$.$AddEvent(window, "resize", ScaleSlider);
$Jssor$.$AddEvent(window, "orientationchange", ScaleSlider);
//responsive code end
};
</script>
<!-- Jssor Slider Begin -->
<div style="position:relative;top:0;left:0;width:50%;height:100%;overflow:hidden;">
<div id="slider1_container" style="margin: 0 auto; position: relative; top: 0px; left: 0px; width: 800px;
height: 356px; background: #191919; overflow: hidden;">
<!-- Loading Screen -->
<div data-u="loading" style="position:absolute;top:0px;left:0px;background:url('../img/loading.gif') no-repeat 50% 50%; background-color: rgba(0, 0, 0, .7);"></div>
<!-- Slides Container -->
<div data-u="slides" style="position: absolute; left: 0px; top: 0px; width: 800px; height: 356px; overflow: hidden;">
<div>
<img u="image" src="../img/alila/01.jpg" />
</div>
<div>
<img u="image" src="../img/alila/02.jpg" />
</div>
<div>
<img u="image" src="../img/alila/03.jpg" />
</div>
<div>
<img u="image" src="../img/alila/04.jpg" />
</div>
<div>
<img u="image" src="../img/alila/05.jpg" />
</div>
<div>
<img u="image" src="../img/alila/06.jpg" />
</div>
<div>
<img u="image" src="../img/alila/07.jpg" />
</div>
<div>
<img u="image" src="../img/alila/08.jpg" />
</div>
<div>
<img u="image" src="../img/alila/09.jpg" />
</div>
<div>
<img u="image" src="../img/alila/10.jpg" />
</div>
<div>
<img u="image" src="../img/alila/11.jpg" />
</div>
<div>
<img u="image" src="../img/alila/12.jpg" />
</div>
</div>
<!--#region Arrow Navigator Skin Begin -->
<style>
/* jssor slider arrow navigator skin 05 css */
/*
.jssora05l (normal)
.jssora05r (normal)
.jssora05l:hover (normal mouseover)
.jssora05r:hover (normal mouseover)
.jssora05l.jssora05ldn (mousedown)
.jssora05r.jssora05rdn (mousedown)
.jssora05l.jssora05lds (disabled)
.jssora05r.jssora05rds (disabled)
*/
.jssora05l, .jssora05r {
display: block;
position: absolute;
/* size of arrow element */
width: 40px;
height: 40px;
cursor: pointer;
background: url(../img/a17.png) no-repeat;
overflow: hidden;
}
.jssora05l { background-position: -10px -40px; }
.jssora05r { background-position: -70px -40px; }
.jssora05l:hover { background-position: -130px -40px; }
.jssora05r:hover { background-position: -190px -40px; }
.jssora05l.jssora05ldn { background-position: -250px -40px; }
.jssora05r.jssora05rdn { background-position: -310px -40px; }
.jssora05l.jssora05lds { background-position: -10px -40px; opacity: .3; pointer-events: none; }
.jssora05r.jssora05rds { background-position: -70px -40px; opacity: .3; pointer-events: none; }
</style>
<!-- Arrow Left -->
<span u="arrowleft" class="jssora05l" style="top: 158px; left: 8px;">
</span>
<!-- Arrow Right -->
<span u="arrowright" class="jssora05r" style="top: 158px; right: 8px">
</span>
<!--#endregion Arrow Navigator Skin End -->
<!-- Trigger -->
<script>
jssor_slider1_init();
</script>
</div>
</div>
<!-- Jssor Slider End -->
</body>
</html>

jssor changing height depending on media queries

I want to change the height of my jssor slider depending on the viewport width, to ensure the HTML of my slide could be read. I'm using ScaleSlider function to scale the slider from desktop and tablet breakpoints, then when I'm in the mobile breakpoint (under 480px width) I want to change the size of the slider to be 100% width and another height (not proportional to initial width and height).
The only way to make it works is to reload the page (==re-initialize jssor)
CSS
.sliderContainer{
width: 1180px;
height: 680px;
position: relative;
overflow: hidden;
#media screen and (max-width: $media-basicmobile-max){
width: 300px;
height: 425px;
}
.slides {
width:1180px;
height: 680px;
position: absolute;
overflow: hidden;
#media screen and (max-width: $media-basicmobile-max){
width: 300px;
height: 425px;
}
}
}
Any ideas? Maybe cloning the slider HTML content and initializing the slider when window resizes.
You can define a wrapper with breakpoints, and scale the slider to cover the whole wrapper area while window resizing. Please see the following example,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Full Screen Slider Cover Window - Jssor Slider</title>
<style>
html, body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
background: #fff;
}
#wrapper {
margin: 0 auto;
width: 1180px;
height: 680px;
max-width: 100%;
position: relative;
overflow: hidden;
}
#media screen and (max-width: 500px) {
#wrapper {
width: 300px;
height: 425px;
}
}
</style>
</head>
<body>
<script type="text/javascript" src="../js/jssor.slider.min.js"></script>
<script>
jssor_slider1_init = function () {
var options = {
$SlideDuration: 800, //[Optional] Specifies default duration (swipe) for slide in milliseconds, default value is 500
$DragOrientation: 1, //[Optional] Orientation to drag slide, 0 no drag, 1 horizental, 2 vertical, 3 either, default value is 1 (Note that the $DragOrientation should be the same as $PlayOrientation when $Cols is greater than 1, or parking position is not 0)
$AutoPlay: 1, //[Optional] Auto play or not, to enable slideshow, this option must be set to greater than 0. Default value is 0. 0: no auto play, 1: continuously, 2: stop at last slide, 4: stop on click, 8: stop on user navigation (by arrow/bullet/thumbnail/drag/arrow key navigation)
$Idle: 1500 //[Optional] Interval (in milliseconds) to go for next slide since the previous stopped if the slider is auto playing, default value is 3000
};
var sliderContainerElement = document.getElementById("slider1_container");
var jssor_slider1 = new $JssorSlider$(sliderContainerElement, options);
//#region responsive code begin
//remove responsive code if you don't want the slider to scale along with window
function ScaleSlider() {
var wrapperElement = document.getElementById("wrapper");
var wrapperWidth = wrapperElement.clientWidth;
if (wrapperWidth) {
var wrapperHeight = wrapperElement.clientHeight;
var originalWidth = jssor_slider1.$OriginalWidth();
var originalHeight = jssor_slider1.$OriginalHeight();
if (originalWidth / wrapperWidth > originalHeight / wrapperHeight) {
jssor_slider1.$ScaleHeight(wrapperHeight);
}
else {
jssor_slider1.$ScaleWidth(wrapperWidth);
}
//adjust vertical position
var scaleHeight = jssor_slider1.$ScaleHeight();
sliderContainerElement.style.top = ((wrapperHeight - scaleHeight) / 2) + "px";
}
else
window.setTimeout(ScaleSlider, 30);
}
ScaleSlider();
$Jssor$.$AddEvent(window, "load", ScaleSlider);
$Jssor$.$AddEvent(window, "resize", ScaleSlider);
$Jssor$.$AddEvent(window, "orientationchange", ScaleSlider);
//#endregion responsive code end
};
</script>
<div id="wrapper">
<div style="position: absolute; left: 50%; margin-left: -2500px; width: 5000px; text-align: center;">
<!-- Jssor Slider Begin -->
<!-- To move inline styles to css file/block, please specify a class name for each element. -->
<div id="slider1_container" style="position: relative; margin: 0 auto; top: 0px; left: 0px; width: 600px; height: 300px;">
<!-- Loading Screen -->
<div data-u="loading" style="position:absolute;top:0px;left:0px;background:url('../img/loading.gif') no-repeat 50% 50%; background-color: rgba(0, 0, 0, .7);"></div>
<!-- Slides Container -->
<div u="slides" style="cursor: move; position: absolute; left: 0px; top: 0px; width: 600px; height: 300px;
overflow: hidden;">
<div>
<img u=image src="../img/landscape/01.jpg" />
</div>
<div>
<img u=image src="../img/landscape/02.jpg" />
</div>
<div>
<img u=image src="../img/landscape/03.jpg" />
</div>
<div>
<img u=image src="../img/landscape/04.jpg" />
</div>
</div>
<!-- Trigger -->
<script>
jssor_slider1_init();
</script>
</div>
<!-- Jssor Slider End -->
</div>
</div>
<!-- remove the following if no need-->
<p>other content</p>
</body>
</html>

Jssor Slider doesn't start

Here is the link to the page where I have pasted the script www.multi-head.pl
Aboe the shoutbox you can see a big banner 1172px wide that I would like to animate with others that are in the code. The thing is that the slider is displaying the images but they dont want to start.
<center>
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.utils.js"></script>
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.slider.js"></script>
<script>
jssor_slider1_starter = function (containerId) {
//Reference http://www.jssor.com/development/slider-with-slideshow-no-jquery.html
//Reference http://www.jssor.com/development/tool-slideshow-transition-viewer.html
var _SlideshowTransitions = [
//Fade
{ $Duration: 1200, $Opacity: 2 }
];
var options = {
$SlideDuration: 800, //[Optional] Specifies default duration (swipe) for slide in milliseconds, default value is 500
$DragOrientation: 3, //[Optional] Orientation to drag slide, 0 no drag, 1 horizental, 2 vertical, 3 either, default value is 1 (Note that the $DragOrientation should be the same as $PlayOrientation when $DisplayPieces is greater than 1, or parking position is not 0)
$AutoPlay: true, //[Optional] Whether to auto play, to enable slideshow, this option must be set to true, default value is false
$AutoPlayInterval: 1500, //[Optional] Interval (in milliseconds) to go for next slide since the previous stopped if the slider is auto playing, default value is 3000
$SlideshowOptions: { //[Optional] Options to specify and enable slideshow or not
$Class: $JssorSlideshowRunner$, //[Required] Class to create instance of slideshow
$Transitions: _SlideshowTransitions, //[Required] An array of slideshow transitions to play slideshow
$TransitionsOrder: 1, //[Optional] The way to choose transition to play slide, 1 Sequence, 0 Random
$ShowLink: true //[Optional] Whether to bring slide link on top of the slider when slideshow is running, default value is false
}
};
var jssor_slider1 = new $JssorSlider$(containerId, options);
}
</script>
<!-- Jssor Slider Begin -->
<!-- You can move inline styles to css file or css block. -->
<div id="slider1_container" style="position: relative; width: 1171px;
height: 257px;">
<!-- Loading Screen -->
<div u="loading" style="position: absolute; top: 0px; left: 0px;">
<div style="filter: alpha(opacity=70); opacity:0.7; position: absolute; display: block;
background-color: #000; top: 0px; left: 0px;width: 100%;height:100%;">
</div>
<div style="position: absolute; display: block; background: url(../img/loading.gif) no-repeat center center;
top: 0px; left: 0px;width: 100%;height:100%;">
</div>
</div>
<!-- Slides Container -->
<div u="slides" style="cursor: move; position: absolute; left: 0px; top: 0px; width: 1171px; height: 257px;
overflow: hidden;">
<div>
<img src="http://i60.tinypic.com/bit2sk.png" />
</div>
<div>
<img src="http://i60.tinypic.com/a1s1t0.png"/>
</div>
<div>
<img src="http://i57.tinypic.com/2nsxbnk.png" />
</div>
</div>
<a style="display: none" href="http://www.jssor.com">content slider</a>
<!-- Trigger -->
<script>
jssor_slider1_starter('slider1_container');
</script>
</div>
This is how I pasted the code inside?
Does anyone have a clue ?
You can use either
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.core.js"></script>
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.utils.js"></script>
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.slider.js"></script>
or
<script type="text/javascript" src="http://multi-head.pl/public/js/jssor.slider.min.js"></script>

How to capture scroll event?

I want to implement infinite scrolling. Below is a short form of my layout. Since I have some elements relative positioned the javascript scroll event does not fire.
How can I fix this problem in order to get the scroll event to be fired and implement the infinite scrolling?
My main layout is:
<div id="container">
<div class="wrapper">
<div id="header">
...
</div> <%-- header --%>
<div id="main">
...
</div>
</div> <%-- wrapper --%>
</div> <%-- container --%>
<div id="footer">
</div>
And my CSS is:
#container {
position: absolute;
z-index: 1;
top: 0;
bottom: 35px;
left: 0;
right: 0;
overflow-y: auto;
overflow-x: hidden;
}
.wrapper {
margin: 0 auto;
width: 960px;
position: relative;
}
#header {
position: relative;
}
#main {
}
#footer {
z-index: 2;
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 35px;
}
What do I have to change such that I can receive the browser scroll event with my layout to implement infinite scrolling?
The correct way to implement it is:
<div id="container" onScroll="handleOnScroll();">
<script>
function handleOnScroll() {
alert("scroll");
};
</script>
EDIT: Since you originally tagged your question with jquery...
To capture the scroll event using jQuery...
HTML:
<div id="container">
CONTENT
</div>
jQuery:
$(document).ready(function() {
$('#container').scroll(function() {
alert('scroll');
// presumably your infinite scrolling code here
});
});
See: http://api.jquery.com/scroll/
This is what i used in my code...
<div id="DataDiv" style="overflow: auto; width: 280px; height:400px; margin-top: 10px;"
onscroll="Onscrollfnction();">
my content here
</div>
Function is as below
function Onscrollfnction() {
var div = document.getElementById('DataDiv');
div.scrollLeft;
return false;
};
After content crossing 400px, scrolling will start and will be infinite..
enjoy